我想在 R 中逐行构造一个数据帧。我做了一些搜索,我想到的只是创建一个空列表的建议,保留一个列表索引标量,然后每次添加列出单行数据帧并将列表索引前进一。最后,do.call(rbind,)
在列表中。
虽然这可行,但看起来很麻烦。难道没有更简单的方法来实现同样的目标吗?
显然,我指的是无法使用某些 apply
函数并且明确需要逐行创建数据帧的情况。至少,有没有办法插入
到列表的末尾,而不是显式地跟踪最后使用的索引?
最佳答案
您可以通过附加或使用 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/