我有一个主数据框df
:
df <- data.frame(c("A", "B", "C"), c(1,2,3), c(3,1,2), c(4,2,1), rep(NA, 3), rep(NA, 3))
colnames(df) <- c("text", "var1", "var2", "var3", "value1", "value2")
另一个包含新信息的数据框df.upd
:
df.upd <- data.frame(c(1,2), c(3,1), c(4,2),c(0.5, 0.6), c(12, 20))
colnames(df.upd) <- c("var1", "var2", "var3", "value1", "value2")
> df
text var1 var2 var3 value1 value2
1 A 1 3 4 NA NA
2 B 2 1 2 NA NA
3 C 3 2 1 NA NA
> df.upd
var1 var2 var3 value1 value2
1 1 3 4 0.5 12
2 2 1 2 0.6 20
我想匹配列“var1”,“var2”,“var3”并更新列“value1”和“value2”。因此,df.upd
的第1行和第2行会更新df
的第1行和第2行,而ergo as.numeric(df.upd[row x, 1:3])==as.numeric(df[row y, 2:4])
必须为TRUE
。
主df有大约30k行和60列,因此for循环不是一个选项。知道如何更快地完成这个任务吗?
答案 0 :(得分:0)
这是一个for循环的答案,但它仍然可能有用且快速,因为该过程是矢量化的。
ind <- intersect(names(df), names(df.upd))
for (i in ind) {
df[1:length(df.upd[,i]),i] <- df.upd[,i]
}