为了保护研究对象不被数据集识别,我有兴趣在R中对向量进行匿名化。但是,我也希望能够在撰写研究时参考输出(例如“subject [随机id]显示......“)。我发现我可以使用匿名程序包来轻松生成短哈希,但是虽然在写入时使用短哈希是可行的,但它并不完全理想(例如“主题f4d35fab显示......”难以记住,有点一口,并且难以区分其他散列数据,例如“来自8b3bd334的主题f4d35fab显示......”。
有没有办法将哈希转换为随机的人类可读字符串,或者以非加密为中心的方式对数据进行匿名化?
答案 0 :(得分:2)
如何为每个主题分配一个随机数:
$('.dropdown-menu').on('shown.bs.collapse', function(e) {
alert("Close");
});
然后,您可以使用引用Mark的数据来讨论主题4.
如果您想要与受试者数量无关的数字:
> subjects <- c("Matthew", "Mark", "Luke", "John")
> subjects.anon <- sample(length(subjects))
> subjects.anon
[1] 1 4 2 3
答案 1 :(得分:1)
只需使用人类可读名称的参考列表,并将其与真实ID的每个唯一值进行匹配。这实际上取决于为别名创建别名所需的值。
一个这样的来源是婴儿名称列表(这里是2010年最常见的1000个名字)。例如
library(babynames)
library(dplyr)
samples <- data.frame(id=1:50, age=rnorm(50, 30, 5))
translate <- babynames %>% filter(year==2010) %>%
top_n(1000, n) %>%
sample_n(length(unique(samples$id))) %>%
select(alias_id=name) %>%
bind_cols(id=unique(samples$id))
translate
# alias_id id
# <chr> <int>
# 1 Savanna 1
# 2 Jasmin 2
# 3 Natalie 3
# 4 Omar 4
# 5 Tristan 5
# 6 Jeremiah 6
# 7 Arielle 7
# 8 Tanner 8
# 9 Francesca 9
# 10 Devin 10
# # ... with 40 more rows
现在我们有了一个转换表,我们可以用它来换出名称的真实ID。
答案 2 :(得分:0)
获取哈希的前m个字符,只要它在第一个m中是唯一的。 (m的值往往是O(log(N)),其中N是主题的数量。)以下是示例代码:
set.seed(1)
v <- do.call(paste0, replicate(n=8, sample(LETTERS, size=100, replace=T), simplify=F))
unique_in_first_m_chars <- function(v, m) {
length(unique(substring(v, 1, m))) == length(v)
}
unique_in_first_m_chars(v, 4)
[1] TRUE
unique_in_first_m_chars(v, 3)
[1] FALSE
unique_in_first_m_chars(v, 2)
[1] FALSE