Я немного опоздал, но как автор пакета, я постараюсь прояснить некоторую путаницу.
tl; dr
Ответ @Allan Cameron дал мне работу , но если все, что вам нужно, это иметь sh ваши идентификаторы, то решение @ mh765, вероятно, является лучшим.
Более подробное объяснение цели duawranglr
duawranglr предполагает, что у вас ограниченный фрейм данных и что вы хотите сделать две вещи, чтобы вы могли поделиться ими:
- Удалить столбцы, которые содержат ограниченные элементы данных (например, DOB или другую идентифицирующую информацию)
- Преобразовать уникальные идентификаторы в другой уникальный идентификатор, который нельзя использовать для возврата в исходные идентификаторы (в случае, если исходные идентификаторы также ограничены, например, SSN)
Поскольку вы не пытаетесь сделать № 1, тогда смысл иметь пешеходный переход DUA, который имеет только один столбец с одним элементом: именем вашего столбца идентификатора (для @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()
так, как хотели sh ваши 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
должен содержать уникальные идентификаторы. Имена работают в примере с игрушкой, потому что они уникальны, но, как отмечали другие, повторные имена для разных наблюдений не будут работать с duawranglr.