将数据框列名称更改为小写时使用 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))
一个我希望更好地理解的快速问题。
数据:
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))