根据多个列名称替换data.table中的值

时间:2018-03-09 16:48:36

标签: r data.table

我发布了这个问题about replacing data in a data.frame,并试图将tyluRp提出的解决方案用于我的数据,但后来又遇到了另一个问题。

我的示例数据,

df1 <- data.frame(
    c(rep("AFG", 3), rep("AUS", 3)),
    rep(c("a", "b", "c"), 2),
    rep(0, 6), 
    rep(0, 6), 
    othr = c(10:15),
    stringsAsFactors = FALSE
)

colnames(df1) <- c("Country", "Category", "2000", "2001", "Oth")

df2 <- data.frame(
    rep("AFG", 2),
    c("a", "b"), 
    c(7, 8),
    c(1, 2),
    stringsAsFactors = FALSE)
)
colnames(df2) <- c("Country", "Category", "2000", "2001")

建议的解决方案适用于2000年,df1中的某些值已替换为df2

library(data.table)

dt1 <- setDT(df1)
dt2 <- setDT(df2)
desirable_output <- dt1[dt2, on = c("Country", "Category"), as.character(2000) := i.2000]

但我无法计算这两年的计算结果, 我的尝试:

years <- c(2000:2001)

for(i in years){
    desirable_output <- dt1[dt2, on = c("Country", "Category"), as.character(i) := paste("i.", years, sep="")]
}

我怎么能解决这种情况?我对:=缺少什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

有限的,少量的列的一种方法

    dt1[dt2, on = c("Country", "Category"), `:=` (`2000` = i.2000, `2001` = i.2001)][]