我使用的某些数据包含敏感信息(人员姓名,日期,位置等)。但是有时我需要与其他人共享“数字”以获取统计分析方面的帮助,或者在无法控制谁查看数据的功能更强大的计算机上进行处理。
理想情况下,我想这样工作:
将数据读入R(查看,清理等)。
选择一个我想解密的数据框,通过一个包运行它并接收两个“文件”:解密后的数据和一个翻译文件。后者,我将保持自我。
解密后的数据可以共享,操作和处理而无需担心。
我将处理后的数据与翻译文件一起重新分类。
我想这在上传数据以“在云中”(Amazon等)进行处理时也很有用。
你来过这种情况吗?我首先想到自己编写一个“随机化”函数,但是后来我意识到,可以做到多么复杂(例如,在不丢失顺序的情况下抵消时间戳)并没有尽头。也许已经有一个已定义的方法或工具?
感谢所有在Stack Overflow上为[r] -tag做出贡献的人!
最佳答案
一种方法是使用match
。首先,我制作一个小数据框:
foo <- data.frame( person=c("Mickey","Donald","Daisy","Scrooge"), score=rnorm(4))
foo
person score
1 Mickey -0.07891709
2 Donald 0.88678481
3 Daisy 0.11697127
4 Scrooge 0.31863009
然后我做一个关键:
set.seed(100)
key <- as.character(foo$person[sample(1:nrow(foo))])
您必须将此密钥显然保存在某个地方。现在,我可以对人员进行编码:
foo$person <- match(foo$person, key)
foo
person score
1 2 0.3186301
2 1 -0.5817907
3 4 0.7145327
4 3 -0.8252594
如果要再次输入人名,则可以为
key
编制索引:key[foo$person]
[1] "Mickey" "Donald" "Daisy" "Scrooge"
或使用
tranform
,如果更改了数据,只要人员ID保持不变,这也将起作用:foo <-rbind(foo,foo[sample(1:4),],foo[sample(1:4,2),],foo)
foo
person score
1 2 0.3186301
2 1 -0.5817907
3 4 0.7145327
4 3 -0.8252594
21 1 -0.5817907
41 3 -0.8252594
31 4 0.7145327
15 2 0.3186301
32 4 0.7145327
16 2 0.3186301
11 2 0.3186301
12 1 -0.5817907
13 4 0.7145327
14 3 -0.8252594
transform(foo, person=key[person])
person score
1 Mickey 0.3186301
2 Donald -0.5817907
3 Daisy 0.7145327
4 Scrooge -0.8252594
21 Donald -0.5817907
41 Scrooge -0.8252594
31 Daisy 0.7145327
15 Mickey 0.3186301
32 Daisy 0.7145327
16 Mickey 0.3186301
11 Mickey 0.3186301
12 Donald -0.5817907
13 Daisy 0.7145327
14 Scrooge -0.8252594
关于r - 如何对数据进行解密和重新分类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5066912/