2017-09-21 6 views
1

J'ai besoin d'ajouter une empreinte digitale à chaque ligne dans un ensemble de données afin de vérifier avec une version plus récente du même ensemble pour rechercher la différence.ajouter un hachage à chaque ligne en utilisant dplyr et digérer dans R

Je sais comment ajouter hachage pour chaque ligne R comme ci-dessous:

data.frame(iris,hash=apply(iris,1,digest)) 

J'apprends à utiliser dplyr comme l'ensemble de données devient énorme et je dois les stocker dans SQL Server, j'ai essayé quelque chose comme ci-dessous, mais le hachage ne fonctionne pas, toutes les lignes donnent le même hachage:

iris %>% 
    rowwise() %>% 
    mutate(hash=digest(.)) 

Un indice pour le hachage de la ligne sage à l'aide dplyr? Merci!

Répondre

0

Nous pourrions utiliser do

res <- iris %>% 
     rowwise() %>% 
     do(data.frame(., hash = digest(.))) 
head(res, 3) 
# A tibble: 3 x 6 
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species        hash 
#   <dbl>  <dbl>  <dbl>  <dbl> <fctr>       <chr> 
#1   5.1   3.5   1.4   0.2 setosa e261621c90a9887a85d70aa460127c78 
#2   4.9   3.0   1.4   0.2 setosa 7bf67322858048d82e19adb6399ef7a4 
#3   4.7   3.2   1.3   0.2 setosa c20f3ee03573aed5929940a29e07a8bb 

Notez que dans la procédure apply, toutes les colonnes sont converties en une seule classe apply convertit en matrix et de la matrice peut contenir une seule classe. Il y aura un avertissement sur la conversion du factor en character classe