我想编写一个循环来从一组已经存在的矩阵中创建多个数据帧。 我使用代码导入并创建了这些代码:
temp<-list.files(pattern="*.csv")
ddives <- lapply(temp, read.csv)
所以'ddives'是我的一组csv文件。我现在想要使用循环版本的代码创建一个数据框:
d.dives1<- data.frame(ddives[1])
答案 0 :(得分:7)
在回答您的问题之前,请快速学习术语:
read.csv()
的结果是data.frame
。lapply()
的结果是list
。因此,您现在拥有一个数据框列表。
如果,您可以安全地假设列表中的数据框具有相同的结构(即相同数量的列和相同的类),那么您可以使用rbind()
来组合您的数据框列表为一个data.frame
。
为简化此操作,您可以按如下方式使用do.call()
:
do.call(rbind, ddives)
do.call
使用list元素作为参数构造函数调用。如果它们被命名,它们将作为命名参数传递,否则按顺序传递(如在R中一样)。在这种情况下,您将rbind
应用于列表中的所有元素,从而创建一个data.frame
。
这显然未经测试,因为我没有您的数据。但是,通常,do.call
对于此类操作来说是一个有用的函数。
答案 1 :(得分:1)
由于这是对您发布的早期问题的跟进,请尝试以下方法:
for (i in 1:length(ddives)) assign(temp[i], ddives[[i]])
答案 2 :(得分:0)
如果你真的想要一个循环版本的代码,那就是:
for (i in 1:length(ddives)){
assign(paste("d.dives", i, sep =""), ddives[i])
}