如何对数据进行去除和重新分类?

Chr*_*ris 7 r

我使用的一些数据包含敏感信息(人员姓名,日期,地点等).但我有时需要与其他人分享"数字"以获得统计分析的帮助,或者在更强大的机器上处理它,在那里我无法控制谁看数据.

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

  1. 将数据读入R(查看,清理等)
  2. 选择我要取消分类的数据框,通过包运行它并接收两个"文件":去分类数据和翻译文件.后者我会保持自己.
  3. 可以无需担心地分享,操纵和处理去分类数据.
  4. 我将处理后的数据与翻译文件重新分类.

我认为这在上传数据以便"在云端"(亚马逊等)进行处理时也很有用.

你有过这种情况吗?我首先想到自己编写一个"随机化"功能,但后来我意识到这可以做到多么复杂(例如,在不丢失顺序的情况下抵消时间戳).也许已经有一个定义的方法或工具?

感谢所有在Stack Overflow为[r] -tag做出贡献的人!

Sac*_*amp 3

一种方法是使用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
Run Code Online (Sandbox Code Playgroud)

然后我制作一个密钥:

set.seed(100)
key <- as.character(foo$person[sample(1:nrow(foo))])
Run Code Online (Sandbox Code Playgroud)

显然你必须把这个密钥保存在某个地方。现在我可以对人进行编码:

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
Run Code Online (Sandbox Code Playgroud)

如果我再次想要人名,我可以索引key:

key[foo$person]
[1] "Mickey"  "Donald"  "Daisy"   "Scrooge"
Run Code Online (Sandbox Code Playgroud)

或者使用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
Run Code Online (Sandbox Code Playgroud)