R面板数据处理:基于投资年份创建t+2期专利申请量衍生变量
实现方法说明
原代码错误原因
你的代码存在两个核心问题:
- 变量名大小写不匹配:你代码中使用的
Year、Investment_Year和数据集中的实际变量名year、investment_year不一致,第一步就无法正确匹配到对应列 - 没有按企业分组匹配:你直接提取的满足
year == investment_year + 2的专利申请量向量长度远小于原数据框行数,赋值时R会自动循环填充向量,导致值和企业无法对应
正确实现方式
方法1:使用dplyr(推荐,面板数据操作更简洁)
通过分组匹配每个企业对应的t+2期专利值:
library(dplyr) df <- df %>% # 按企业名称分组 group_by(company_name) %>% # 分组内匹配投资年+2对应的专利申请量 mutate(patent_applications_t2 = patent_applications[year == investment_year + 2]) %>% # 取消分组 ungroup()
方法2:基础R实现(无需加载第三方包)
使用ave函数完成分组匹配:
df$patent_applications_t2 <- ave( 1:nrow(df), df$company_name, FUN = function(idx) { sub <- df[idx, ] sub$patent_applications[sub$year == sub$investment_year + 2] } )
注意事项
如果部分企业的投资年份+2不在2012-2020的观测区间内,生成的patent_applications_t2会自动返回NA,属于正常的缺失值情况。
内容的提问来源于stack exchange,提问作者NeuroticJet
相关产品推荐
相关产品推荐

