今天有个小伙伴问了这样的一个问题:
R 语言中如何将每个公司过去 5 年的所有专利分类号合并成一个观测值?例如某个公司在 2010~2020 年间每年申请了一些专利,想得到一个这样的结果,例如 2020 年的结果是把 2015~2019 年的专利集合起来;2012 年的结果是把 2010~2011 年的专利集合起来。
下面是一个示例数据:
library(tidyverse) haven::read_dta("data.dta") -> df
df
|
例如 2016 年 000001 公司:
df %>% filter(stkcd == "000001", between(申请年, 2016 - 5, 2015)) %>% select(-申请年) %>% nest(data = -c(stkcd)) -> nestdf
nestdf$data %>% unlist() %>% paste0(collapse = ";")
|
然后我们就可以循环所有公司的所有年份了:
unique(df$stkcd) %>% crossing(df$申请年) %>% set_names("stkcd", "申请年") -> crossdf
crossdf
crossdf %>% mutate(被引证专利集合 = map2_chr(stkcd, 申请年, function(x, y){ df %>% filter(stkcd == x, between(申请年, y - 5, y - 1)) %>% select(-申请年) %>% nest(data = -c(stkcd)) -> nestdf
nestdf$data %>% unlist() %>% paste0(collapse = ";") })) -> crossdf
crossdf
|
这样就解决了这个问题。
点击这里跳转到 RStata 短书平台获取附件:R 语言:如何将每个公司过去 5 年的所有专利分类号合并成一个观测值?
评论