我有点晚了,但作为包作者,我会尽力解决一些困惑。
tl;博士
@Allan Cameron 给出的答案对我有用,但如果您只想散列您的 ID,那么@mh765 的解决方案可能是最好的。
duawranglr 用途的详细说明
duawranglr 假设您有一个受限制的数据框,并且您想要做两件事以便可以共享它:
- 删除包含受限数据元素(如 DOB 或
其他识别信息)
- 将唯一标识符转换为另一个无法用于返回原始 ID 的唯一 ID(以防原始 ID 也受到限制,例如 SSN)
由于您没有尝试执行 #1,因此有一个只有一列和一个元素的 DUA 人行横道是有意义的:您的 ID 列的名称(根据 @Allan Cameron)。
但是假设您有两个潜在的安全级别,而在第二个级别中,您不能包含V1。那么你的 DUA 人行横道可能看起来像这样:
library(duawranglr)
## your data frame
df <- data.frame(Name = c("Kate", "Jane", "Rod", "Jan", "Martin"),
V1 = c(16, 20, 34, 25, 26),
V2 = c(3, 7, 5, 3, 2))
## create dua crosswalk
dua_cw <- data.frame(secure_level_i = c("Name",""),
secure_level_ii = c("Name", "V1"))
## show cw (level_i won't allow name; level_ii won't allow name or V1)
dua_cw
secure_level_i secure_level_ii
1 Name Name
2 V1
## set the dua cw
set_dua_cw(dua_cw)
-- duawranglr note -------------------------------------------------------------
DUA crosswalk has been set!
现在您可以设置安全级别。假设您将其设置为secure_level_i,这意味着可以将V1 保留在您共享的最终数据框中:
## set DUA level
set_dua_level("secure_level_i", deidentify_required = TRUE, id_column = "Name")
-- duawranglr note -------------------------------------------------------------
Unique IDs in [ Name ] must be deidentified; use -deid_dua()-.
现在您可以使用deid_dua() 对您的 ID 进行哈希处理,在本例中为名称。
## deidentify data (don't need to set id_col since we set it in set_dua_level)
df <- deid_dua(df,
new_id_name = "DID",
write_crosswalk = TRUE,
id_length = 12,
crosswalk_filename = "cw.csv")
## show result
df
DID V1 V2
1 d164bb624da2 16 3
2 a8b33e3b0230 20 7
3 a1d287cbdde7 34 5
4 1c00ba576e1a 25 3
5 a870564b3365 26 2
## show crosswalk
read.csv("cw.csv")
Name DID
1 Kate d164bb624da2
2 Jane a8b33e3b0230
3 Rod a1d287cbdde7
4 Jan 1c00ba576e1a
5 Martin a870564b3365
## check restrictions to see if you can save data
check_dua_restrictions(df)
-- duawranglr note -------------------------------------------------------------
Data set has passed check and may be saved.
但是,如果您将 set_dua_level() 更改为 "secure_level_ii",那么您将无法通过最后一次检查,因为您的数据中仍然有 V1。
## set new more secure level
set_dua_level("secure_level_ii", deidentify_required = TRUE, id_column = "Name")
-- duawranglr note -------------------------------------------------------------
Unique IDs in [ Name ] must be deidentified; use -deid_dua()-.
## check again
check_dua_restrictions(df)
-- duawranglr note -------------------------------------------------------------
The following variables are not allowed at the current data usage level
restriction [ secure_level_ii ] and MUST BE REMOVED before saving:
- V1
要通过新级别,您需要从数据框中删除 V1。
## drop
df$V1 <- NULL
## check again
check_dua_restrictions(df)
-- duawranglr note -------------------------------------------------------------
Data set has passed check and may be saved.
最后一点,您的id_col 必须包含唯一的 ID。这些名称在玩具示例中有效,因为它们是唯一的,但正如其他人所指出的那样,不同观察的重复名称不适用于 duawranglr。