为了账号安全,请及时绑定邮箱和手机立即绑定

如何从私有数据创建示例数据集(用不提供信息的占位符替换变量名称和级别)?

如何从私有数据创建示例数据集(用不提供信息的占位符替换变量名称和级别)?

慕莱坞森 2019-10-25 13:09:01
为了提供方法的可重现示例,必须经常提供数据集。我不想建立示例数据集,而是希望使用自己的一些数据。但是,此数据无法发布。我希望用不具信息性的占位符(例如V1 .... V5,L1 .... L5)替换变量(列)名称和因子级别。有自动的方法可以做到这一点吗?理想情况下,这将在R中完成,接受一个data.frame并生成此匿名data.frame。有了这样的数据集,只需在脚本中搜索并替换变量名,您便拥有了一个可公开发布的可复制示例。这样的过程可能会增加在可复制示例中包含适当数据,甚至在问题,评论和错误报告中还会包含可复制示例。
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

我不知道是否有被自动执行此功能,但现在没有;)


## A function to anonymise columns in 'colIDs' 

##    colIDs can be either column names or integer indices

anonymiseColumns <- function(df, colIDs) {

    id <- if(is.character(colIDs)) match(colIDs, names(df)) else colIDs

    for(id in colIDs) {

        prefix <- sample(LETTERS, 1)

        suffix <- as.character(as.numeric(as.factor(df[[id]])))

        df[[id]] <- paste(prefix, suffix, sep="")

    }

    names(df)[id] <- paste("V", id, sep="")

    df

}


## A data.frame containing sensitive information

df <- data.frame(

    name = rep(readLines(file.path(R.home("doc"), "AUTHORS"))[9:13], each=2),

    hiscore = runif(10, 99, 100),

    passwd = replicate(10, paste(sample(c(LETTERS, letters), 9), collapse="")))


## Anonymise it

df2 <- anonymiseColumns(df, c(1,3))


## Check that it worked

> head(df, 3)

           name  hiscore    passwd

1 Douglas Bates 99.96714 ROELIAncz

2 Douglas Bates 99.07243 gDOLNMyVe

3 John Chambers 99.55322 xIVPHDuEW    


> head(df2, 3)

  name hiscore  V3

1   Q1 99.96714 V8

2   Q1 99.07243 V2

3   Q2 99.55322 V9


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信