唯一化 R 中重复的列名

Mic*_*ael 5 r unique columnname duplicates

所以我加载了一个包含重复列名的 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))
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 9

我们可以用make.uniquewhich 也有sep论点

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

在我们的 '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  
Run Code Online (Sandbox Code Playgroud)

一种选择是使用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="_")
Run Code Online (Sandbox Code Playgroud)

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

sub("\\.", "_", names(problem_df))
#[1] "A"   "B"   "A_1" "B_1" "A_2"
Run Code Online (Sandbox Code Playgroud)