我想在R中逐行构造一个数据帧。我已经做了一些搜索,而我的建议是创建一个空列表,保持列表索引标量,然后每次添加到列表中一个单行数据帧,并将列表索引前移一个。最后,在列表上添加do.call(rbind,)

尽管此方法有效,但似乎非常麻烦。有没有更简单的方法可以实现相同的目标?

显然,我指的是无法使用apply函数并且明确需要逐行创建数据帧的情况。至少,有一种方法可以将push放入列表的末尾,而不是显式跟踪最后使用的索引吗?

最佳答案

您可以通过追加或使用rbind()逐行增长它们。

那并不意味着你应该。动态增长的结构是用R进行编码的效率最低的方法之一。

如果可以,请预先分配整个data.frame:

N <- 1e4  # total number of rows to preallocate--possibly an overestimate

DF <- data.frame(num=rep(NA, N), txt=rep("", N),  # as many cols as you need
                 stringsAsFactors=FALSE)          # you don't know levels yet

然后在操作过程中一次插入一行
DF[i, ] <- list(1.4, "foo")

这应该适用于任意data.frame,并且效率更高。如果您超过N,则总是可以在最后缩小空行。

关于list - 逐行创建R数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3642535/

10-11 04:23