我在数据框中创建了一个新的空列,我想将来自单独数据框中的值与具有相同个人和年份的行进行匹配。
df1 <- data.frame(names = c("greg", "naomi", "tera", "greg", "dylan", "tera"),
year = c(2010, 2010, 2011, 2012, 2013, 2013), status = numeric())
df2 <- data.frame(names = c("greg", "greg", "naomi", "tera", "tera", "dylan"),
year = c(2010, 2011, 2011, 2011, 2013, 2012),
status = c(1,0,2,0,1,3))
我希望 df2$status 中的值与 df1 中相应的年份和个人相匹配,如下所示。
names year status
1 greg 2010 1
2 naomi 2010 2
3 tera 2011 0
4 greg 2012 0
5 dylan 2013 3
6 tera 2013 1
我已经考虑使用 if... else
,但我想知道是否有一种方法可以使用 match()
函数或其他类似方法。我正在努力使我的代码尽可能简短。
答案 0 :(得分:2)
我们可以使用连接
library(data.table)
setDT(df1)[df2, status := i.status, on = .(names, year)]