首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按数据帧中的组和年份在行中与前几行进行比较的唯一值

按数据帧中的组和年份在行中与前几行进行比较的唯一值
EN

Stack Overflow用户
提问于 2021-04-22 19:45:38
回答 2查看 37关注 0票数 0

我正在处理专利数据,我想找出在当前专利被转让的前一年,公司是否被分配了类似或不同类别的专利。

举个例子:公司1010 (见下表)在1984年获得了子类别67的专利,我想知道它在过去的X年中是否在同一子类别中申请了专利(例如,X可以是3或5 )。结果应该是,对于每个专利(行),如果是这样,则赋值1,如果不是,则赋值0。

每家公司的观察量(gvkey)和出版年份是不平衡的(因此每家公司的观察量并不相同)。

我已经摸索过dplyrdata.table,但似乎找不到任何接近的解决方案。

代码语言:javascript
运行
复制
    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

我到处寻找帮助,但没有找到我要找的东西。我相信这是可能的,我可能忽略了一些非常简单的事情。

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2021-04-22 19:58:55

对于整个过去,一种可能的解决方案如下

代码语言:javascript
运行
复制
df %>% 
     group_by(gvkey, subcat) %>% 
           mutate(flagged = ifelse(min(publn_year) == publn_year, 
                                       0, 
                                       1)
                  )

示例

考虑一下数据

代码语言:javascript
运行
复制
> 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

然后你就会得到

代码语言:javascript
运行
复制
> 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
票数 0
EN

Stack Overflow用户

发布于 2021-04-22 20:58:19

这里有一种使用dplyr的方法。首先,对固定类别使用group_by gvkey,对子类别使用subcat。然后,使用arrange并按年份排序。然后,您可以添加一个新值为0/1的列,其依据是某一年与最近一年的专利之间的差异是否在X年之内(这里的示例是3年)。我还会检查组中的第一行,这样就不会被设置为1。如果这是您想要的,请让我知道。

代码语言:javascript
运行
复制
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))

输出

代码语言:javascript
运行
复制
   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     0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67212638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档