r - 在相同的 data.tables 上执行 bind_rows() 和 rbind() 后,相同()= FALSE?
问题描述
警告:新手。我有几个 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
目视检查 bind_rows() 和 rbind() 的结果表明它们确实是相同的。我读了这个和这个(从我改编这个例子的地方)。我的问题:(a)我缺少什么,以及(b)如果我的列的数量、名称和顺序相同,我是否应该担心相同()= FALSE?
解决方案
identical
检查attributes
是不一样的。使用all.equal
,可以选择不检查属性 ( check.attributes
)
all.equal(DT_bindrows, DT_rbind, check.attributes = FALSE)
#[1] TRUE
如果我们检查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
通过将属性分配给 NULL,identical
返回TRUE
attr(DT_rbind, ".internal.selfref") <- NULL
identical(DT_bindrows, DT_rbind)
#[1] TRUE
推荐阅读
- javascript - SSL 错误 - 版本号错误(HTTPS 到 HTTP)
- intellij-idea - IntelliJ 中的版权管理令人困惑
- android - 如何在 android 中使用边界回调分页库在 nasa apod api 中显示新数据?
- cors - 预检响应 403 被禁止。如何在没有 x-api-key 的情况下允许选项方法?
- c++ - 1.70.0版本后如何继承boost :: asio :: streambuf?
- awk - 如何打印多个文件的最后一行?
- oracle - 如何将值从一个表传递到另一个表的对象列?
- angular - 角材料可扩展表不起作用
- python - 主题建模和潜在狄利克雷分配 (LDA)
- python - GMS 3.4.x 中的 Python - 使用 matplotlib.pyplot 时 DM 崩溃:无法找到或加载 Windows 的 Qt 平台插件