我是R的初学者,我无法在网上找到解决方案。
我有一个由50个数据帧组成的列表对象。我想将此列表拆分为单独的data.frame
对象,但我在执行此操作时遇到了麻烦。
手动操作很简单:
a<-list[[1]]
但我想循环它,这样我就不必手动输入所有50个组件。这不起作用:
for(i in 1:n.imp)
a.i<-comb.txt1[[i]]
因为它只生成一个(最后一个)数据帧。
有什么想法吗?
这是一些额外的背景:此列表是多重插补程序的产物 - mi()。我想将一个新变量合并到这些插补数据集中,但似乎无法弄清楚如何做到这一点,因为该对象是一个列表。
答案 0 :(得分:4)
我认为这就是你所追求的目标:
for(i in 1:length(comb.txt1)) {
assign(paste0("a.", i), comb.txt1[[i]])
}
答案 1 :(得分:2)
如果您的列表中包含名称,或者您使用attach(comb.txt1)
names(comb.txt1) <- paste('a', seq_along(comb.txt1), sep='.')
尽管如此,可能没有必要用50 data.frames
来混乱你的工作区。假设您要添加到每个data.frame
的新变量是一些原子向量var
(即像c(1,2,3)
这样的向量)。您可以使用data.frame
将list
添加到lapply(comb.txt1, function(comb.txt1.DF) within(comb.txt1.DF, new.var <- var))
中的每个{{1}}。
答案 2 :(得分:1)
我不确定这是你在找什么,但是......
生成数据框列表:
> set.seed(1)
> df1 <- data.frame(a=rnorm(10), b=rnorm(10))
> df2 <- data.frame(a=rnorm(10), b=rnorm(10))
> df3 <- data.frame(a=rnorm(10), b=rnorm(10))
> my.list <- list(df1, df2, df3)
然后,使用带有lapply()的assign():
> lapply(seq_along(my.list),
function(i,x) {assign(paste0("a",i),x[[i]], envir=.GlobalEnv)},
x=my.list)
> a1
a b
1 -0.6264538 1.51178117
2 0.1836433 0.38984324
3 -0.8356286 -0.62124058
4 1.5952808 -2.21469989
5 0.3295078 1.12493092
6 -0.8204684 -0.04493361
7 0.4874291 -0.01619026
8 0.7383247 0.94383621
9 0.5757814 0.82122120
10 -0.3053884 0.59390132