Как анонимизировать данные без потери дубликатов - PullRequest
2 голосов
/ 02 марта 2020

Мне нужно анонимизировать данные, содержащие номера клиентов. Около половины из них являются дублирующими значениями, поскольку эти клиенты появляются более одного раза. Как я могу анонимизировать в R, чтобы дубликаты были преобразованы в одно и то же значение?

Заранее спасибо!

1 Ответ

4 голосов
/ 02 марта 2020

Предположим, ваши данные выглядят так:

df <- data.frame(id = c("A", "B", "C", "A", "B", "C"), value = rnorm(6),
                 stringsAsFactors = FALSE)
df
#>   id      value
#> 1  A -0.8238857
#> 2  B -0.1553338
#> 3  C -0.6297834
#> 4  A -0.4616377
#> 5  B  0.1643057
#> 6  C -0.6719061

И ваш список новых строк идентификаторов (которые могут быть созданы случайным образом - см. Сноску) выглядит следующим образом:

newIds <- c("newId1", "newId2", "newId3")

Тогда сначала вы должны убедиться, что ваш столбец id является фактором:

df$id <- as.factor(df$id)

Тогда вам, вероятно, следует сохранить идентификаторы клиента для безопасного поиска позже

lookup <- data.frame(key = newIds, value = levels(df$id))
lookup
#>      key value
#> 1 newId1     A
#> 2 newId2     B
#> 3 newId3     C

Теперь все, что вам нужно сделать перезаписывает уровни факторов:

levels(df$id) <- newIds

df
#>       id      value
#> 1 newId1  0.7241847
#> 2 newId2  0.4313706
#> 3 newId3 -0.8687062
#> 4 newId1  1.3464852
#> 5 newId2  0.6973432
#> 6 newId3  1.9872338

Примечание: Если вы хотите создать случайные строки для идентификаторов, вы можете сделать это:

sapply(seq_along(levels(df$id)), function(x) paste0(sample(LETTERS, 5), collapse = ""))
#> [1] "TWABF" "YSBUF" "WVQEY"

Создано в 2020-03-02 пакетом Представить (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...