我正在阅读文档,data.table并且还注意到了一些关于SO的对话,这些对话rbindlist应该比我更好rbind.
我想知道为什么rbindlist比真正优秀的rbind场景更好?rbindlistrbind
在内存利用方面有什么优势吗?
我有一组包含不同列的数据框.我想将它们按行组合成一个数据帧.我习惯plyr::rbind.fill这样做.我正在寻找能够更有效地完成这项工作的东西,但这与此处给出的答案类似
require(plyr)
set.seed(45)
sample.fun <- function() {
nam <- sample(LETTERS, sample(5:15))
val <- data.frame(matrix(sample(letters, length(nam)*10,replace=TRUE),nrow=10))
setNames(val, nam)
}
ll <- replicate(1e4, sample.fun())
rbind.fill(ll)
Run Code Online (Sandbox Code Playgroud) 警告:新手.我有几个data.tables,每个数百万行,变量主要是日期和因素.我正在使用rbindlist()来组合它们,因为.昨天,在将表分成较小的块(而不是当前的水平拼接)之后,我试图更好地理解rbind(特别是使用fill = TRUE)并尝试了bind_rows()然后尝试验证结果但是相同( )返回FALSE.
library(data.table)
library(dplyr)
DT1 <- data.table(a=1, b=2)
DT2 <- data.table(a=4, b=3)
DT_bindrows <- bind_rows(DT1,DT2)
DT_rbind <- rbind(DT1,DT2)
identical(DT_bindrows,DT_rbind)
# [1] FALSE
Run Code Online (Sandbox Code Playgroud)
目视检查bind_rows()和rbind()的结果表明它们确实相同.我读了这个和这个(从我调整的例子).我的问题:(a)我错过了什么,以及(b)如果我的列的数量,名称和顺序是相同的,我是否应该关注相同的()= FALSE?
我想知道我如何rbindlist具有不同列数的数据表,并用像rbind.fill这样的NA填充空行
DT1 <- data.table(A = 1:3)
DT2 <- data.table(A =4:5, B = letters[4:5])
l <- list(DT1, DT2)
rbindlist(l)
# Error in rbindlist(l) :
# Item 2 has 2 columns, inconsistent with item 1 which has 1 columns
Run Code Online (Sandbox Code Playgroud)
我想得到的是
A B
1: 1 NA
2: 2 NA
3: 3 NA
4: 4 d
5: 5 e
Run Code Online (Sandbox Code Playgroud)