arm*_*unk 6 r rbind dplyr data.table
警告:新手.我有几个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?
该identical支票attributes这是不一样的.有all.equal,有一个选项不检查属性(check.attributes)
all.equal(DT_bindrows, DT_rbind, check.attributes = FALSE)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)
如果我们检查str两个数据集,就会变得清晰
str(DT_bindrows)
#Classes ‘data.table’ and 'data.frame': 2 obs. of 2 #variables:
# $ a: num 1 4
# $ b: num 2 3
str(DT_rbind)
#Classes ‘data.table’ and 'data.frame': 2 obs. of 2 #variables:
# $ a: num 1 4
# $ b: num 2 3
# - attr(*, ".internal.selfref")=<externalptr> # reference attribute
Run Code Online (Sandbox Code Playgroud)
通过将属性赋值为NULL,identical返回TRUE
attr(DT_rbind, ".internal.selfref") <- NULL
identical(DT_bindrows, DT_rbind)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)