我已多次查看dplyr
的文档,但它表明dplyr::rename_all
是"范围" dplyr::rename
的变体。有人能解释一下这对语法和功能有什么影响吗?为什么使用一个与另一个? dplyr
的文档对此并不清楚。
答案 0 :(得分:16)
rename_all
对所有名称应用函数rename
提供个人替换名称例如:
library(dplyr)
cars %>% rename_all(toupper) %>% head
# SPEED DIST
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
cars %>% rename_all(substr, 3) %>% head
# spe dis
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
cars %>% rename(speeeeeed = speed, distance = dist) %>% head
# speeeeeed distance
# 1 4 2
# 2 4 10
# 3 7 4
# 4 7 22
# 5 8 16
# 6 9 10
答案 1 :(得分:7)
除了已经提到的情况外,当您为现有变量分配了完整的列名替换集时,rename_all
会派上用场。
当您尝试将该变量传递到rename_all
时遇到困难。无论是否使用dplyr帮助文件中提到的.funs
包装器,都无法将变量直接传递到第二个参数funs()
中。变量名不是函数或表达式。这是一个符号。
.funs用funs()或单引号括起来的单个表达式, 字符串命名一个函数或一个函数。
new_car_names <- c("a", "b")
# Won't work.
cars %>% rename_all( new_car_names ) %>% head
cars %>% rename_all( funs( new_car_names ) ) %>% head
以下是一些可以用“ funs()引用的单个表达式”的示例。
cars %>% rename_all( funs( c("a", "b")) ) %>% head
cars %>% rename_all( funs( c(new_car_names) ) ) %>% head
cars %>% rename_all( funs( ~new_car_names ) ) %>% head
cars %>% rename_all( funs( quo(new_car_names) ) ) %>% head
这里是“单次表达内的一个例子”。
cars %>% rename_all( quo( quo(new_car_names) ) ) %>% head
这是“一个函数”(不使用其参数的一个例子)的例子。
cars %>% rename_all( function(.){new_car_names} ) %>% head
最后,是“命名函数的字符串”的示例。
test_function <- function(.){new_car_names}
cars %>% rename_all( "test_function" ) %>% head
尽管此问题未涉及rename_at
,但这些示例说明了可能的用法。请注意,rename_at
的第二个参数.vars
接受字符向量或位置编号以标识要重命名的现有列。
cars %>% rename_at( .vars = "speed", function(.){new_car_names[[1]]} )
cars %>% rename_at( .vars = 1, function(.){new_car_names[[1]]} )
cars %>% rename_at( .vars = c(1,2), function(.){new_car_names} )