r语言 - "colnames<-'('*tmp*',值 = '*vtmp*') 中的错误:尝试在小于二维的对象上设置"colnames"



我正在尝试重命名df的特定列名。

为了执行此任务,我正在使用一个函数,通过使用for循环来执行替换。

这是我的代码:


## data ##
df <- structure(list( 
A = c(1,2,3),
B = c("Yes", "Yes", "No"),
C = c("John", "James", "Maria"),
D = c(45, 34, 23),
E = c(712, 777, 888)),

class = "data.frame",
row.names = c(NA, -3L))
## setting atomic vectors for original/new names ##
original_df_names <- c("A", "B", "C")
new_df_names <- c("Order", "Answer", "Name")

## function to rename columns ##
rename_fun <- function(df, original_names, new_names){
for(i in 1:seq_along(original_names)){
for(j in 1:seq_along(new_names)){
colnames(df)[which(names(df) == i)] <- j
}
}
}
## applying function ##
df <- mapply(df = df,
original_names = original_df_names,
new_names = new_df_names,
rename_fun)

控制台输出:

Error in `colnames<-`(`*tmp*`, value = `*vtmp*`) : 
attempt to set 'colnames' on an object with less than two dimensions

预期输出

names(df)
[1] "Order" "Answer" "Names" "D" "E"

还有其他方法可以做到这一点吗?

我们可以使用rename_at

library(dplyr)
df <- df %>%
rename_at(vars(all_of(original_df_names)), ~ new_df_names)

最新更新