如何拆分列表并单独保存对象?

时间:2016-06-17 18:41:55

标签: r

我正在尝试向多个数据框添加新列,然后用新数据框替换原始数据框。这就是我创建新数据框的方式:

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行代码。

2 个答案:

答案 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指导我这个。