编写循环以多次应用运算符'data.frame'

时间:2012-07-11 15:53:21

标签: r csv for-loop dataframe lapply

我想编写一个循环来从一组已经存在的矩阵中创建多个数据帧。 我使用代码导入并创建了这些代码:

temp<-list.files(pattern="*.csv")
ddives <- lapply(temp, read.csv)

所以'ddives'是我的一组csv文件。我现在想要使用循环版本的代码创建一个数据框:

d.dives1<- data.frame(ddives[1])

3 个答案:

答案 0 :(得分:7)

在回答您的问题之前,请快速学习术语:

  1. read.csv()的结果是data.frame
  2. lapply()的结果是list
  3. 因此,您现在拥有一个数据框列表。

    如果,您可以安全地假设列表中的数据框具有相同的结构(即相同数量的列和相同的类),那么您可以使用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])
}