在下面的data.table中,个人的名字在p1中给出。 每个人都有inc_1给出的收入如下:
data_gen = function(){
p_names = letters[1:10]
dataset = data.table(p1 = c(sample(p_names,10,replace=F),"y"), p2 = c(sample(p_names,10,replace=F),"z"), inc_1 = round(rnorm(11,1000,200)))
return(dataset)
}
set.seed(43210)
data_1 = data_gen()
data_1
每个人p1与p2中列出的个人密切相关,我有兴趣将新列中的p2收入列为inc_2至inc_1。 “匹配”命令对于实现此目标非常有用
data_2 = data_1 # saved for latter use
data_1$inc_2 = data_1$inc_1[match(data_1$p2,data_1$p1,nomatch = NA)]
data_1
在data_1中,我们看到p2 =“i”的收入inc_2恰好列为p_1 =“b”的inc_1,依此类推......但是,对于数据集中的新维度,年份,我无法多年来正确生成合作伙伴p2 income inc_2。
set.seed(43211)
data_3 = data_gen()
data_4 = rbind(cbind(year=rep(2015,11),data_2),cbind(year=rep(2016,11),data_3))
data_4
如果我们重现与以前相同的代码,那么'匹配'会错过时间维度而不会返回2016年,而p1 =“g”2016年收入inc_2为p2 =“h”,而是2015年收入“h”
data_4$inc_2 = data_4$inc_1[match(data_4$p2,data_4$p1,nomatch = NA)]
data_4
我认为添加by = c('year')可以解决问题,但下面没有一行正确生成inc_2
data_4[ , inc_1[match(p2,p1,nomatch = NA)],by=c('year')] # close too, but v2 is not included in data_4
data_4[ , inc_2 = inc_1[match(p2,p1,nomatch = NA)],by=c('year')]
data_4$inc_2 = data_4[ , inc_1[match(p2,p1,nomatch = NA)],by=c('year')]
我很感激对这一点的任何评论......