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”。
我们可以用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.unique和sep="_"
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)