将数据框列名称更改为小写时使用 set_names 与 mutate(colnames)

Using set_names vs. mutate(colnames) when changing data frame column names to lower case

一个我希望更好地理解的快速问题。

数据:

df1 <- data.frame(COLUMN_1 = letters[1:3], COLUMN_2 = 1:3)

> df1
  COLUMN_1 COLUMN_2
1        a        1
2        b        2
3        c        3

为什么将数据框名称设置为小写:

df2 <- df1 %>%
  set_names(., tolower(names(.))) 

> df2
  column_1 column_2
1        a        1
2        b        2
3        c        3

但这不是吗?

df2 <- df1 %>%
  mutate( colnames(.) <-  tolower(colnames(.)) )

Error: Column `colnames(.) <- tolower(colnames(.))` must be length 3 (the number of rows) or one, not 2

显式写出参数的解决方案是:

df1 %>% rename_all(tolower) == rename_all(.tbl = df1, .funs = tolower)

mutate 对数据本身进行操作,而不是对列名进行操作,因此这就是我们使用重命名的原因。我们使用 rename_all 是因为您不想输入 1 = tolower(1), 2 = tolower(2), ...

您建议的 df2 <- df1 %>% rename_all(tolower(.)) 不起作用,因为那样您将尝试将整个 df1 提供给 tolower 函数,这不是您想要的。

另一种解决方案是 names(df) <- tolower(names(df))