如何在列表中分别保存data.frames?
这是我的问题。如果你能帮忙,我真的很感激。 我有一个列表,其中包含几个长度不同但结构相同的data.frames。 现在我想分别保存列表中的data.frames。 注意:不要使用do.call(rbind,…)将它们合并到一个data.frame中。我还想给数组中的每个data.frame命名如何在列表中分别保存data.frames?,r,list,dataframe,R,List,Dataframe,这是我的问题。如果你能帮忙,我真的很感激。 我有一个列表,其中包含几个长度不同但结构相同的data.frames。 现在我想分别保存列表中的data.frames。 注意:不要使用do.call(rbind,…)将它们合并到一个data.frame中。我还想给数组中的每个data.frame命名 a=c(1,2,3,4,5,6) b=c(4,5,6,5,5,5) c=c(3,4,5,6,7,8) A=data.frame(a=a,b=b,c=c) B=data.frame(a=c,b=b
a=c(1,2,3,4,5,6)
b=c(4,5,6,5,5,5)
c=c(3,4,5,6,7,8)
A=data.frame(a=a,b=b,c=c)
B=data.frame(a=c,b=b,c=a)
C=data.frame(a=b,b=c,c=a)
l <- list(A, B, C)
names.list <- c("NewYear_Data", "Thanks_giving", "Christmas")
a=c(1,2,3,4,5,6)
b=c(4,5,6,5,5)
c=c(3,4,5,6,7,8)
A=数据帧(A=A,b=b,c=c)
B=数据帧(a=c,B=B,c=a)
C=数据帧(a=b,b=C,C=a)
这是解决办法
l <- list(A, B, C)
nms <- c("NewYear_Data", "Thanks_giving", "Christmas")
names(l) = nms
如果要删除该列表,请执行以下操作:
attach(l)
Christmas
要将它们保存在二进制文件中,请执行以下操作:
save(list=nms,file='file.Rdata')
或在文本文件中:
for( i in 1:length(l))
write.csv(l[i],paste0(nms[i],'.txt'))
注意:为了避免在运行代码后调用变量名,我们有:
> ls()
[1] "a" "A" "b" "B" "c" "C"
[7] "l" "names.list"
然后,您可以将data.frames分配给名称中的名称。列表
:
> invisible(mapply(function(x, y) assign(x, y, envir=globalenv()), names.list, l))
> ls()
[1] "a" "A" "b" "B" "c"
[6] "C" "Christmas" "l" "names.list" "NewYear_Data"
[11] "Thanks_giving"
> Christmas
a b c
1 4 3 1
2 5 4 2
3 6 5 3
4 5 6 4
5 5 7 5
6 5 8 6
> NewYear_Data
a b c
1 1 4 3
2 2 5 4
3 3 6 5
4 4 5 6
5 5 5 7
6 6 5 8
然后,如果要清理工作区并删除用于创建数据的内容,可以运行以下操作(请小心,这将删除工作区中的所有内容,但我们刚刚创建的数据框除外):
坦白地说,我建议@Andrey使用attach给出答案,但如果您真的希望将数据帧放在工作区中,并清除用于创建数据帧的内容,这是一个选项。使用带有命名元素的单个列表几乎总是比使用工作区中的大量对象更可取。但是,有两个函数可以方便地实现您的目标,它们是setNames()
和list2env()
。下一行将使用names.list
中的名称在全局环境中创建命名的data.frame
对象
list2env( setNames( l , names.list ) , .GlobalEnv )
setNames()
是一个方便的函数,用于设置对象的名称并返回对象list2env()
将命名列表中的每个元素分配到指定的环境中,这样您将得到3个data.frame
对象。如果问题是“如何将数据帧列表保存为文件夹中的单独文件?”,您可以尝试使用saveRDS
而不是save
()
否则,可以将整个列表另存为单个文件
save(l, file = "Holidays.Rda")
您所展示的代码中有哪些地方不完美?我想念你没有达到的目标。嗨,安德烈,我编辑了一点:)欢迎任何建议!真的不清楚你想在哪里结束。也许list2env
对您有用?(或者,正如安德烈在回答中所建议的那样,这可能很容易,就像名字一样。)你说的“分别”是什么意思?我感觉这个词对你的意义与我们大多数人阅读你的问题的意义不同。你的意思是按字母顺序还是其他特定的顺序?我只是想把这个列表去掉..谢谢Andey,你帮了我大忙。也许我没有解释清楚。在这里,我想分别使用相同的data.frame。那就是我想要圣诞节,我想要感恩,我想要新年数据。你能提供一些建议吗?谢谢我已使用attach
选项更新了我的答案。这是你想要的吗?谢谢Andrey!很抱歉,我没有足够的声誉去投票……我们离我想要的更近了。现在我想为每个附加的data.frame分别保存data.frame。保存是什么意思?(更新答案)再次感谢您的帮助!我想在下面的分析中使用列表中的data.frame。所以我想去掉这个列表…实际上我读取了包含这个列表的rdata文件,并想提取data.frame。现在清楚了吗?
list2env( setNames( l , names.list ) , .GlobalEnv )
names(l) <- names.list
lapply(names(l), function(df)
saveRDS(l[[df]], file = paste0(df, ".rds")))
list.files(pattern = ".rds")
[1] "Christmas.rds" "NewYear_Data.rds" "Thanks_giving.rds"
# To load an individual dataframe later
df <- readRDS(file = "NewYear_Data.rds")
with(l,
lapply(names(l), function(df)
save(list = df, file = paste0(df, ".rda"))))
list.files(pattern = ".rda")
[1] "Christmas.rda" "NewYear_Data.rda" "Thanks_giving.rda"
save(l, file = "Holidays.Rda")