2016-10-13 4 views
0

J'essaie de créer une application brillante qui permet à un utilisateur de sélectionner des colonnes à chiffrer où les valeurs dans chaque ligne doivent toujours être les mêmes dans les exécutions suivantes si les données est le même. C'est à dire. Si le nom du client = "John" vous obtenez toujours "A" lors de l'exécution de ce processus, si le nom du client change en "Jon", vous pouvez obtenir "C" ... mais si vous revenez à "John" vous obtiendrez A encore. Cela va être utilisé pour 'Masquer' les données sensibles pour l'analyse. De plus, si quelqu'un pouvait donner son avis sur une méthode pour «déchiffrer» ces colonnes en stockant une clé à utiliser plus tard ... cela serait apprécié.Digest-Obtenir des valeurs différentes dans toutes les lignes lors de la modification d'un seul

Une version simpliste de la façon dont je tente d'accomplir cette (bibliothèque digest nécessaire):

test <- data.frame(CustomerName=c("John Snow","John Snow","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Joe Farmer","Joe Farmer","Joe Farmer","Joe Farmer"), 
       LoanNumber=c("12548","45878","45796","45813","45125","45216","45125","45778","45126","32548","45683"), 
       LoanBalance=c("458463","5412548","458463","5412548","458463","5412548","458463","5412548","458463","5412548","2484722"), 
       FarmType=c("Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy")) 


test[,1] <- sapply(test[,1],digest,algo="sha1") 

Exemple de sortie:

        CustomerName LoanNumber LoanBalance FarmType 
1 5c96f777a14f201a6a9b79623d548f7ab61c7a11  12548  458463  Hay 
2 5c96f777a14f201a6a9b79623d548f7ab61c7a11  45878  5412548 Dairy 
3 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45796  458463  Fish 
4 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45813  5412548  Hay 
5 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463 Dairy 
6 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45216  5412548  Fish 
7 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463  Hay 
8 b0db86a39b9617cef61a8986fd57af7960eec9f4  45778  5412548 Dairy 
9 b0db86a39b9617cef61a8986fd57af7960eec9f4  45126  458463  Fish 
10 b0db86a39b9617cef61a8986fd57af7960eec9f4  32548  5412548  Hay 
11 b0db86a39b9617cef61a8986fd57af7960eec9f4  45683  2484722 Dairy 

modifié dataframe (retiré 'h' dans Jean):

test <- data.frame(CustomerName=c("Jon Snow","Jon Snow","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Daffy Duck","Joe Farmer","Joe Farmer","Joe Farmer","Joe Farmer"), 
      LoanNumber=c("12548","45878","45796","45813","45125","45216","45125","45778","45126","32548","45683"), 
      LoanBalance=c("458463","5412548","458463","5412548","458463","5412548","458463","5412548","458463","5412548","2484722"), 
      FarmType=c("Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy","Fish","Hay","Dairy")) 
test[,1] <- sapply(test[,1],digest,algo="sha1") 

sortie Nouveau:

        CustomerName LoanNumber LoanBalance FarmType 
1 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  12548  458463  Hay 
2 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  45878  5412548 Dairy 
3 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45796  458463  Fish 
4 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45813  5412548  Hay 
5 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45125  458463 Dairy 
6 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45216  5412548  Fish 
7 b0187b6ff2322fa86004d4d22cd479f3cdc345d2  45125  458463  Hay 
8 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45778  5412548 Dairy 
9 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45126  458463  Fish 
10 2127453066c45db6ba7e2f6f8c14d22796c3fd54  32548  5412548  Hay 
11 2127453066c45db6ba7e2f6f8c14d22796c3fd54  45683  2484722 Dairy 

Ce que je me serais attendu:

CustomerName LoanNumber LoanBalance FarmType 
1 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  12548  458463  Hay 
2 2cabeabb3b50e04d3b46ea2c68ab12c7350cd87f  45878  5412548 Dairy 
3 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45796  458463  Fish 
4 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45813  5412548  Hay 
5 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463 Dairy 
6 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45216  5412548  Fish 
7 10bf345ab114c20df2d1eedbbe7e7cd6b969db05  45125  458463  Hay 
8 b0db86a39b9617cef61a8986fd57af7960eec9f4  45778  5412548 Dairy 
9 b0db86a39b9617cef61a8986fd57af7960eec9f4  45126  458463  Fish 
10 b0db86a39b9617cef61a8986fd57af7960eec9f4  32548  5412548  Hay 
11 b0db86a39b9617cef61a8986fd57af7960eec9f4  45683  2484722 Dairy 

que je comprends mal comment cela fonctionne? Si j'applique la même logique à plusieurs colonnes, j'obtiens les mêmes valeurs pour la colonne non modifiée, mais le problème persiste pour la colonne avec des valeurs modifiées. J'ai essayé de vectoriser la fonction de résumé juste pour m'assurer que ma fonction de Sapply n'était pas le problème avec les mêmes résultats. Des idées?

Répondre

0

Je pense que j'ai répondu à ma propre question ... bien sûr après que je l'ai posté ici :).

La fonction digest possède un paramètre serialize avec la documentation suivante: Une variable logique indiquant si l'objet doit être sérialisé à l'aide de sérialiser (sous forme ASCII). Le réglage à FALSE permet de comparer la sortie de résumé de chaînes de caractères données à une sortie de contrôle connue. Il permet également l'utilisation de vecteurs bruts tels que la sortie de la sérialisation non-ASCII.

La définition de la sérialisation sur FALSE semble résoudre le problème et obtenir la sortie attendue.

ex:

test[,1] <- sapply(test[,1],digest,algo="sha1",serialize = FALSE)