我多次审核了“dplyr”文档,并指出“dplyr::rename_all”是“dplyr::rename”的“scoped”变体。有人可以解释一下这涉及到语法和功能方面的具体内容吗?为什么要使用一个而不是另一个?关于此问题,“dplyr”文档并不清楚。
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
rename_all
非常有用。rename_all
时会遇到困难。直接将变量传递给第二个参数.funs
是行不通的,无论是否使用dplyr帮助文件中提到的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
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} )
cars %>% setNames(new_car_names)
,不是吗?cars %>% rename_all( funs( ~new_car_names ))
不起作用。也许你的意思是cars %>% rename_all(~new_car_names)
。 - moodymudskipperrename
、rename_all
、rename_at
和rename_if
),因为它们可以应对各种情况,而且在代码中搜索“rename”可以找到它们。setNames
也可以使用,但请查看rlang
包中的set_names
。它与setNames
类似,但具有附加功能。 - SoFarthercars %>% rename_all(~new_car_names)
无法工作,我刚刚尝试了以下代码:new_car_names <- c("a", "b")
cars %>% rename_all( funs( ~new_car_names ) ) %>% head
,它可以正常工作。这两行代码是否无法执行或者无法为您重命名? - SoFarthernew_car_names <- c("a", "b"); cars %>% rename_all( funs( ~new_car_names ) ) %>% head
对我无效。 - SavedByJESUS