所以我加载了一个包含重复列名的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))
或者列名称后缀可以是&#39; _2&#39;和&#39; _3&#39;。
答案 0 :(得分:2)
我们可以使用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
的{{1}},默认为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.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="_")
或者使用sub
假设数据集对象是使用.\\d+
作为重复名称的列名创建的
sub("\\.", "_", names(problem_df))
#[1] "A" "B" "A_1" "B_1" "A_2"