我正在探索如何更有效地比较两个R数据框,并且想到了哈希。
我的计划是为具有相同列的两个数据框中的每一行数据创建哈希,使用digest
包中的digest
函数,并且我认为对于任何两个相同的数据行,哈希值应该是相同的。
我尝试使用以下代码为每一行数据提供唯一的哈希值:
for (loop.ssi in (1:nrow(ssi.10q3.v1)))
{ssi.10q3.v1[loop.ssi,"hash"] <- digest(as.character(ssi.10q3.v1[loop.ssi,]))
print(paste(loop.ssi,nrow(ssi.10q3.v1),sep="/"))
flush.console()
}
但这非常缓慢。
我比较数据框的方法正确吗?如果是,有没有建议可以加快上面的代码?谢谢。
更新
我已经按照下面的方式更新了代码:
ssi.10q3.v1[,"uid"] <- 1:nrow(ssi.10q3.v1)
ssi.10q3.v1.hash <- ddply(ssi.10q3.v1,
c("uid"),
function(df)
{df[,"uid"]<- NULL
hash <- digest(as.character(df))
data.frame(hash=hash)
},
.progress="text")
我为了“唯一”目的自动生成了一个uid
列。
plyr::join
(以及开发版本中的match_df
)来实现比较和匹配数据框的策略。另请参阅plyr::join.df
和plyr::id
。 - hadley