给出以下数据框:
df1 <- data.table("1A"=c(0,0,0,0),"1B"=c(1:4),"2A"=c(0,0,0,0), "2B"=c(1:4))
df2 <- data.table("1A"=c(1:4),"2A"=c(1:4))
> df1
1A 1B 2A 2B
1: 0 1 0 1
2: 0 2 0 2
3: 0 3 0 3
4: 0 4 0 4
> df2
1 2
1: 1 1
2: 2 2
3: 3 3
4: 4 4
包含标识符“A”的目标列使用以下索引标识:
indx = grep("A", colnames(df1))
> indx
[1] 1 3
我试图用相同的顺序填充'indx'标识的列的值和来自df2的列,而不更改df1的colnames。那样:
> df1
1A 1B 2A 2B
1: 1 1 1 1
2: 2 2 2 2
3: 3 3 3 3
4: 4 4 4 4
请注意,这是一个简化的例子,我的实际数据包含大约50个我需要填写的列,所以我需要一个编程方法。
非常感谢提前!
答案 0 :(得分:3)
受@ Frank的评论启发 - 同样适用于常规:=
语法,并且不会引入额外的副本:
df1[, (indx) := df2]