【问题标题】:Uniquefy duplicate column names in R [duplicate]在R中唯一化重复的列名[重复]
【发布时间】:2018-05-15 15:59:34
【问题描述】:

所以我加载了一个包含重复列名的 Excel 文件。每次重复列名时,我想添加一个后缀。所以:

problem_df <- data.frame(A = rep(1, 5), B = rep(2, 5), A = rep(3, 5), B = rep(4, 5), A = rep(5, 5))
solution_df <- data.frame(A = rep(1, 5), B = rep(2, 5), A_1 = rep(3, 5), B_1 = rep(4, 5), A_2 = rep(5, 5))

或者列名后缀可以是“_2”和“_3”。

【问题讨论】:

    标签: r duplicates unique columnname


    【解决方案1】:

    我们可以使用make.unique,它也有sep 参数

    make.unique(c("A", "B", "A", "B", "A"), sep="_")
    #[1] "A"   "B"   "A_1" "B_1" "A_2"
    

    在我们的“problem_df”中,data.frame 调用使用了check.names = TRUE,它调用了make.names,它调用了make.unique,默认情况下sep.

    在检查 data.frame 时,它位于从第 124 行开始的代码块中

      if (check.names) {
        if (fix.empty.names) 
            vnames <- make.names(vnames, unique = TRUE) ###
        else {
            nz <- nzchar(vnames)
            vnames[nz] <- make.names(vnames[nz], unique = TRUE) ###
        }
    }
    names(value) <- vnames  
    

    一种选择是使用check.names = FALSE,然后使用make.uniquesep="_" 分配列名

    problem_df <- data.frame(A = rep(1, 5), B = rep(2, 5), A = rep(3, 5),
           B = rep(4, 5), A = rep(5, 5), check.names = FALSE)
    names(problem_df) <- make.unique(names(problem_df), sep="_")
    

    或使用sub 假设创建数据集对象时使用.\\d+ 作为重复名称的列名

    sub("\\.", "_", names(problem_df))
    #[1] "A"   "B"   "A_1" "B_1" "A_2"
    

    【讨论】:

      猜你喜欢
      • 2019-06-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2021-05-15
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多