【问题标题】:Error in `colnames<-`(`*tmp*`, value = `*vtmp*`) : attempt to set 'colnames' on an object with less than two dimensions`colnames<-`(`*tmp*`, value = `*vtmp*`) 中的错误:尝试在小于二维的对象上设置 'colnames'
【发布时间】:2020-11-17 19:06:46
【问题描述】:

我正在尝试重命名 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"

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

【问题讨论】:

    标签: r function dataframe for-loop names


    【解决方案1】:

    我们可以使用rename_at

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多