create hash value for each row of data in dataframe in R

database, hash, r

Solution

If I get what you want properly, digest will work directly with apply:

library(digest)
ssi.10q3.v1.hash <- data.frame(uid = 1:nrow(ssi.10q3.v1), hash = apply(ssi.10q3.v1, 1, digest))

Problem

I am exploring how to compare two dataframe in R more efficiently, and I come up with hash. My plan is to create hash for each row of data in two dataframe with same columns, using `digest` in `digest` package, and I suppose hash should be the same for any 2 identical row of data. I tried to give and unique hash for each row of data, using the code below: ``` 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() } ``` But this is very slow. Is my approach in comparing dataframe correct? If yes, any suggestion for speeding up the code above? Thanks. UPDATE I have updated the code as below: ``` 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") ``` I self-generated a `uid` column for the "unique" purpose.

Original source