首页 > 解决方案 > 与 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 )

标签: rdata.table

解决方案


base版本有一个名为sorted. 此属性由 的默认行为创建merge,如果您这样做:

base <- merge( a , b, by = c("id"),sort = FALSE)

它们是相同的。


推荐阅读