为了提供方法的可复制示例,通常必须提供数据集.我希望使用我自己的一些数据,而不是构建一个示例数据集.然而,这些数据无法公布.我希望用不具信息性的占位符(例如V1…V5,L1…L5)替换变量(列)名称和因子级别.

Is an automated way to do this available?

理想情况下,这将在R中完成,接收数据.帧并生成匿名数据.框架

有了这样的数据集,只需在脚本中搜索并替换变量名,就有了一个可公开发布的可复制示例.

这样的过程可能会增加在可复制示例中包含适当数据,甚至在问题、 comments 和错误报告中包含可复制示例.

推荐答案

我不知道是否有was个功能可以自动执行,但有now个;)

## 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

R相关问答推荐

R kableExtra在插入水平线时添加额外的空白行

基于2行删除重复项指定每列要执行的操作

DT::可数据的正规表达OR运算符问题

使用预定值列表将模拟数量(n)替换为rnorm()

R创建一个数据透视表,计算多个组的百分比

使用gggrassure减少地块之间的空间

使用strsplit()将向量操作为数据框

如何优化向量的以下条件赋值?

删除具有相同标题的tabPanel(shinly)

从BRM预测价值

使用范围和单个数字将数字与字符串进行比较

从服务器在Shiny中一起渲染图标和文本

更新R中的数据表(使用data.table)

列名具有特殊字符时的循环回归

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

正则表达式在第二个管道和第二个T之后拆分R中的列

我如何使用循环来编写冗余的Rmarkdown脚本?

变长向量的矢量化和

如何提取R中其他字符串和数字之间的字符串?

判断函数未加载R中的库