R中的摘要功能是否适合匿名参与者标识符?

时间:2013-04-08 04:52:09

标签: r

我经常对人类参与者进行研究。 由于各种原因,我的初步标识符有时是减少数据中匿名性的信息的组合(例如,我可能连接包括完成日期和时间的字符串,IP地址和参与者提供的一些信息)。

因此,如果要以某种形式共享数据,则需要从初步ID创建清理的ID。需要清除已清理的ID以获取此类信息。 R中的简单方法只是分配连续的数字(例如,df$id <- seq(nrow(df))其中df是data.frame)。 但是,如果在研究的初始阶段收集更多数据或使用行,则可能会导致问题。即,每次更新原始数据集时,分配给给定参与者的清理ID可能不同。这反过来会破坏对清理数据集的后续分析,例如,可能已基于清理的ID过滤了案例。

因此,我考虑使用digest function in the digest package创建哈希。

df$id <- sapply(df$raw_id, digest)

这似乎导致了从原始标识符到清除标识符的可靠方式,但是对于只拥有清理标识符的任何人来说,获取原始标识符是不可能的。

但是,鉴于我对digest函数和哈希一般都不熟悉,我想问:

  • digest是否适合剥离识别信息的ID?
  • 为此目的使用digest是否有任何问题?

1 个答案:

答案 0 :(得分:12)

我从上面的评论中学到了很多有用的东西。这个答案旨在提炼这些评论。

为了匿名研究参与者标识符,散列有两个问题:

  • 重复ID :这似乎只是一个理论问题,但不是一个实际问题(特别是如果你使用sha1)。但我很高兴能够对此予以纠正。
  • 缺乏匿名性:如果您知道哈希算法,并且您知道ID格式,并且您知道构成ID的确切信息,那么您将能够确定哪些参与者匹配那些信息。在许多不共享格式的情况下,参与者信息未知,或者ID使用的信息实际上是不可知的,那么这实际上不是问题。尽管如此,在ID中添加一些密码文本似乎是一种简单的解决方案,可以防止这种情况成为问题。

因此,总结一下我收集的建议。

library(digest)
hashed_id <- function(x, salt) {
    y <- paste(x, salt)
    y <- sapply(y, function(X) digest(X, algo="sha1"))
    as.character(y)
}

mydata$id <- hashed_id(mydata$raw_id, "somesalt1234")