0

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

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

所以“ddives”是我的一组 csv 文件。我现在想使用循环版本的代码从其中的每一个中创建一个数据框:

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

3 回答 3

7

在我回答您的问题之前,先快速了解一下术语:

  1. 结果read.csv()是一个data.frame
  2. 结果lapply()是一个list

因此,您现在有一个数据框列表。

如果您可以安全地假设列表中的数据框具有相同的结构(即相同的列数和相同的类),那么您可以使用rbind()将您的数据框列表组合成一个data.frame.

为了使这更容易,您可以使用do.call()如下:

do.call(rbind, ddives)

do.call使用列表元素作为参数从函数构造调用。如果它们被命名,它们将作为命名参数传递,否则按顺序传递(与 R 中一样)。在这种情况下,您将应用于rbind列表中的所有元素,从而创建一个data.frame.


这显然是未经测试的,因为我没有你的数据。但是,一般来说,do.call对于这种类型的操作来说,这是一个有用的功能。

于 2012-07-11T16:01:54.347 回答
1

由于这是您之前发布的问题的后续,请尝试以下操作:

for (i in 1:length(ddives)) assign(temp[i], ddives[[i]])
于 2012-07-11T16:06:05.890 回答
0

如果您真的想要代码的循环版本,这将是:

for (i in 1:length(ddives)){
  assign(paste("d.dives", i, sep =""), ddives[i])
}
于 2012-07-11T16:15:37.990 回答