r - 与 data.table 合并/加入与合并功能不同
问题描述
我试图了解我是否应该使用data.table
或基于 r 来合并data.tables
。这两种方法产生相同数量的行和列以及相同的变量类,但identical
函数返回 false。我试图了解这两种方法之间有什么不同。
library( data.table )
a <- data.frame(
id = 1:10000000,
var1 = sample(letters , 10000000, replace=T ),
var2 = sample(letters , 10000000, replace=T ),
var3= sample(letters , 10000000, replace=T )
)
b <- data.frame(
id = 1:10000000,
var4 = sample(letters , 10000000, replace=T ),
var5 = sample(letters , 10000000, replace=T ),
var6= sample(letters , 10000000, replace=T )
)
a <- data.table( a )
b <- data.table( b )
system.time( dts <- a[b, on = .(id )] )
system.time( base <- merge( a , b, by = c("id") ) )
# returns FALSE
identical( dts , base )
# BUT the classes and dims are the same
sapply( dts , class )
sapply( base , class )
dim( base )
dim( dts )
解决方案
该base
版本有一个名为sorted
. 此属性由 的默认行为创建merge
,如果您这样做:
base <- merge( a , b, by = c("id"),sort = FALSE)
它们是相同的。
推荐阅读
- sql-server - 如何将本地 sql server 中的数据导入 Azure SQL Server
- ruby-on-rails - 我应该如何从模块返回哈希?
- javascript - 通过 javascript 为 chrome 浏览器阻止警报或任何自定义弹出窗口
- mysql - 多个主键的更快选择查询
- kubernetes - Kubernetes 是否缓存 docker-registry 机密?
- reporting-services - 在 SSRS 中仅允许标准订阅
- amazon-web-services - 无法验证 AWS 中 *.*.compute 内部主机名的证书
- powershell - PFX / 软件证书无法正常运行
- matlab - 为什么这些逻辑表达式会在 matlab 中生成这些答案?
- javascript - JsPDF在每个新页面上重复第一行