我正在尝试向多个数据框添加新列,然后用新数据框替换原始数据框。这就是我创建新数据框的方式:
df1 <- data.frame(X1=c(1,2,3),X2=c(1,2,3))
df2 <- data.frame(X1=c(4,5,6),X2=c(4,5,6))
groups <- list(df1,df2)
groups <- lapply(groups,function(x) cbind(x,X3=x[,1]+x[,2]))
groups
[[1]]
X1 X2 X3
1 1 1 2
2 2 2 4
3 3 3 6
[[2]]
X1 X2 X3
1 4 4 8
2 5 5 10
3 6 6 12
我对如何创建新数据框表示满意。我所坚持的就是分解我的groups
列表,然后将列表元素保存回各自的原始数据框中。
所需输出
基本上,我想做df1,df2 <- groups[[1]],groups[[2]]
之类的事情,但这当然不是合成有效的。我有2个以上的数据帧,这就是为什么我希望采用更简单的方法而不是简单地键入N行代码。
答案 0 :(得分:3)
for (i in 1:length(groups)){
assign(paste("df",i,sep=""),as.data.frame(groups[[i]]))
}
应该这样做。请试一试。
答案 1 :(得分:1)
@Rockbar也引导我找到一般解决方案:
for(i in 1:length(groups)){
assign(names(groups)[i],as.data.frame(groups[[i]]))
}
> df1
X1 X2 X3
1 1 1 2
2 2 2 4
3 3 3 6
> df2
x1 X3 X3
1 4 4 8
2 5 5 10
3 6 6 12
我应该注意,这只有在列表中的对象都被命名时才有效。再次感谢@Rockbar指导我这个。