我使用的某些数据包含敏感信息(人员姓名,日期,位置等)。但是有时我需要与其他人共享“数字”以获取统计分析方面的帮助,或者在无法控制谁查看数据的功能更强大的计算机上进行处理。

理想情况下,我想这样工作:


将数据读入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/

10-12 17:44
查看更多