【问题标题】:Data anonymization in RR中的数据匿名化
【发布时间】:2020-04-16 12:17:30
【问题描述】:

我试图运行以下代码来屏蔽 2 列中的数据,但失败并出现以下错误:

setwd("/cloud/project/CX")

Credit_tbl <-read.csv(file = 'Sample_data.csv',sep = ",",stringsAsFactors = FALSE)

anonymize <- function(x, algo="crc32"){
  unq_hashes <- vapply(unique(x), function(object) digest(object, algo=algo), FUN.VALUE="", USE.NAMES=TRUE)
  unname(unq_hashes[x])
}

cols_to_mask <- c("Email","Phone")

Credit_tbl[,cols_to_mask := lapply(.SD, anonymize),.SDcols=cols_to_mask,with=FALSE]

错误:

[.data.frame(Credit_tbl, , :=(cols_to_mask, lapply(.SD, anonymize)), : 未使用的参数 (.SDcols = cols_to_mask, with = 假)

【问题讨论】:

  • 请使用dput 添加数据并显示相同的预期输出。请阅读有关how to ask a good question 以及如何提供reproducible example 的信息。
  • Credit_tbl
  • 但因以下错误而失败[.data.frame(Credit_tbl, , :=(cols_to_mask, lapply(.SD, anonymize)) 中的错误,: 未使用的参数 (.SDcols = cols_to_mask, with = FALSE)

标签: r


【解决方案1】:

您有一个数据框,并且正在使用data.table 语法。

将数据框转换为data.table 并应用该函数。

library(data.table)
library(digest)

cols_to_mask <- c("Email","Phone")

anonymize <- function(x, algo="crc32") {
    sapply(x, function(y) if(y == "" | is.na(y)) "" else digest(y, algo = algo))
}

setDT(Credit_tbl)
Credit_tbl[, (cols_to_mask) := lapply(.SD, anonymize), .SDcols = cols_to_mask]

无需更改为data.table,您可以使用lapply 应用该功能:

Credit_tbl[cols_to_mask] <- lapply(Credit_tbl[cols_to_mask], anonymize)

【讨论】:

  • 谢谢 Ronak 我已经更改了将数据帧转换为 data.table 的代码,现在我得到了电子邮件的预期结果,但对于电话号码,所有值都转换为 ,如下所示. ID Name Email Phone Survey 1: 10 Ravi e9678a9267018fb55f357b79b856d561 Survey 1 2: 20 John 559bfd75952e5c08a0b637bf59b1e0f1 Survey 2 3: 30 Smith 690ef5d2cb4095950c14a20c6e5fee03 Survey 3 4: 40 Kevin Survey 3 do we need对电话号码使用不同的算法而不是“crc32”?
  • @NPK 我认为您的anonymize 功能很复杂。您可以尝试更新的答案吗? "crc32" 也适用于数字。
  • 谢谢你,Ronak 我确实尝试了更新的代码,它运行良好,但只有一件事我们如何更改代码以应用值不为 Null 的匿名函数。如果 Null 保持原样。非常感谢您的帮助
  • @NPK 空你的意思是NA 吗?如果是这样,您可以在函数中使用sapply(x, function(y) if(is.na(y)) NA else digest(x, algo = algo))
  • Null 表示空值,我只想离开,因为没有价值。我已将代码更改如下,现在为所有数据获得相同的加密值并且“NA”值仅适用于电子邮件地址匿名化
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多