有一些答案提到了dplyr::rename_with
和rlang::set_names
这两个函数,但它们是不同的。本答案将说明两者之间的差异以及使用函数和公式来重命名列。
dplyr
包中的rename_with
函数可以使用函数或公式来重命名传递给.cols
参数的一组列。例如,可以传递函数名toupper
:
library(dplyr)
rename_with(head(iris), toupper, starts_with("Petal"))
等同于传递公式~ toupper(.x)
:
rename_with(head(iris), ~ toupper(.x), starts_with("Petal"))
当需要重命名所有列时,您也可以使用rlang包中的set_names
。为了举例说明,让我们使用paste0
作为重命名函数。paste0
需要两个参数,因此根据是否使用函数或公式,有不同的方法来传递第二个参数。
rlang::set_names(head(iris), paste0, "_hi")
rlang::set_names(head(iris), ~ paste0(.x, "_hi"))
使用rename_with
也能实现同样的功能,只需将数据框作为第一个参数.data
,函数作为第二个参数.fn
,所有列作为第三个参数.cols=everything()
,函数参数作为第四个参数...
。或者您可以将第二、第三和第四个参数放在公式中,作为第二个参数给出。
rename_with(head(iris), paste0, everything(), "_hi")
rename_with(head(iris), ~ paste0(.x, "_hi"))
rename_with
只能用于数据框。 set_names
更通用,可以对向量进行重命名。
rlang::set_names(1:4, c("a", "b", "c", "d"))
rename_with
可以使用函数或公式来重命名作为.cols
参数给出的所有列。例如,rename_with(iris, toupper, starts_with("Petal"))
等同于rename_with(iris, ~ toupper(.x), starts_with("Petal"))
。 - Paul Rougieux