我正在处理专利数据,我想找出在当前专利被转让的前一年,公司是否被分配了类似或不同类别的专利。
举个例子:公司1010 (见下表)在1984年获得了子类别67的专利,我想知道它在过去的X年中是否在同一子类别中申请了专利(例如,X可以是3或5 )。结果应该是,对于每个专利(行),如果是这样,则赋值1,如果不是,则赋值0。
每家公司的观察量(gvkey)和出版年份是不平衡的(因此每家公司的观察量并不相同)。
我已经摸索过dplyr和data.table,但似乎找不到任何接近的解决方案。
gvkey publn_year subcat patent
1: 1010 1980 53 4184663
2: 1010 1980 55 4185564
3: 1010 1980 53 4187814
4: 1010 1981 45 4242866
5: 1010 1981 55 4242966
6: 1010 1981 69 4246928
7: 1010 1982 53 4310145
8: 1010 1982 53 4311298
9: 1010 1982 69 4313458
10: 1010 1983 69 4367764
11: 1010 1983 53 4368927
12: 1010 1983 53 4368928
13: 1010 1984 67 4428585
14: 1010 1984 53 4429855
15: 1010 1984 53 4430983
16: 1012 1987 52 4683010
17: 1013 1980 43 4203066
18: 1013 1981 41 4245879
19: 1013 1982 41 4363941
20: 1013 1983 41 4367907我到处寻找帮助,但没有找到我要找的东西。我相信这是可能的,我可能忽略了一些非常简单的事情。
谢谢你的帮助。
发布于 2021-04-22 19:58:55
对于整个过去,一种可能的解决方案如下
df %>%
group_by(gvkey, subcat) %>%
mutate(flagged = ifelse(min(publn_year) == publn_year,
0,
1)
)示例
考虑一下数据
> df
gvkey publn_year subcat patent
1 1010 1979 53 44434
2 1010 1980 55 43424
3 1010 1981 53 243423
4 1010 1982 45 234234然后你就会得到
> df %>% group_by(gvkey, subcat) %>% mutate(flagged = ifelse(min(publn_year) == publn_year, 0, 1))
# A tibble: 4 x 5
# Groups: gvkey, subcat [3]
gvkey publn_year subcat patent flagged
<dbl> <dbl> <dbl> <dbl> <dbl>
1 1010 1979 53 44434 0
2 1010 1980 55 43424 0
3 1010 1981 53 243423 1
4 1010 1982 45 234234 0发布于 2021-04-22 20:58:19
这里有一种使用dplyr的方法。首先,对固定类别使用group_by gvkey,对子类别使用subcat。然后,使用arrange并按年份排序。然后,您可以添加一个新值为0/1的列,其依据是某一年与最近一年的专利之间的差异是否在X年之内(这里的示例是3年)。我还会检查组中的第一行,这样就不会被设置为1。如果这是您想要的,请让我知道。
library(dplyr)
df %>%
group_by(gvkey, subcat) %>%
arrange(gvkey, subcat, publn_year) %>%
mutate(prior = ifelse(publn_year - lag(publn_year) <= 3 & row_number() != 1, 1, 0))输出
gvkey publn_year subcat patent prior
<int> <int> <int> <int> <dbl>
1 1010 1981 45 4242866 0
2 1010 1980 53 4184663 0
3 1010 1980 53 4187814 1
4 1010 1982 53 4310145 1
5 1010 1982 53 4311298 1
6 1010 1983 53 4368927 1
7 1010 1983 53 4368928 1
8 1010 1984 53 4429855 1
9 1010 1984 53 4430983 1
10 1010 1980 55 4185564 0
11 1010 1981 55 4242966 1
12 1010 1984 67 4428585 0
13 1010 1981 69 4246928 0
14 1010 1982 69 4313458 1
15 1010 1983 69 4367764 1
16 1012 1987 52 4683010 0
17 1013 1981 41 4245879 0
18 1013 1982 41 4363941 1
19 1013 1983 41 4367907 1
20 1013 1980 43 4203066 0https://stackoverflow.com/questions/67212638
复制相似问题