2016-10-13 2 views
0

Ich versuche, eine glänzende App zu erstellen, die einem Benutzer ermöglicht, zu verschlüsselnde Spalten auszuwählen, wobei die Werte in jeder Zeile bei nachfolgenden Durchläufen der Daten immer übereinstimmen sollten ist dasselbe. I.e. Wenn Kundenname = "John", erhalten Sie immer "A", wenn dieser Prozess ausgeführt wird. Wenn der Kundenname auf "Jon" wechselt, könnten Sie "C" erhalten ... aber wenn Sie wieder zu "John" wechseln, erhalten Sie A erneut. Dies wird verwendet, um sensible Daten für die Analyse zu "maskieren".Digest-Erhalte verschiedene Werte in allen Zeilen, wenn ich nur einen ändere

Darüber hinaus, wenn jemand eine Methode zum 'Entschlüsseln' dieser Spalten durch Speichern eines Schlüssels, der später verwendet werden könnte, ... würde das geschätzt werden.

Eine vereinfachte Version, wie ich bin versucht, diese (verdauen Bibliothek erforderlich) zu erreichen:

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") 

Beispiel Ausgabe:

        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 

Modifizierte Datenrahmen (entfernt 'h' in John):

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") 

Neue Ausgabe:

        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 

Was ich erwartet hätte:

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 

Bin ich Missverständnis, wie das funktioniert? Wenn ich dieselbe Logik auf mehrere Spalten anwende, erhalte ich die gleichen Werte für die unveränderte Spalte, aber das Problem bleibt für die Spalte mit geänderten Werten bestehen. Ich habe versucht, die Digest-Funktion zu vektorisieren, nur um sicherzustellen, dass meine Sapply-Funktion nicht das Problem mit den gleichen Ergebnissen war. Irgendwelche Ideen?

Antwort

0

Ich denke, dass ich meine eigene Frage beantwortet habe ... natürlich gleich nachdem ich es hier gepostet habe :).

Die Digest-Funktion hat einen Serialisierungsparameter mit der folgenden Dokumentation: Eine logische Variable, die angibt, ob das Objekt serialisiert werden soll (in ASCII-Form). Wenn Sie dies auf FALSE setzen, können Sie die Digest-Ausgabe bestimmter Zeichenfolgen mit der bekannten Kontrollausgabe vergleichen. Es erlaubt auch die Verwendung von Rohvektoren, wie die Ausgabe von Nicht-ASCII-Serialisierung.

Einstellung serialisieren auf FALSE scheint das Problem zu lösen, und ich bekomme die erwartete Ausgabe.

ex:

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