我想在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/