【发布时间】:2018-01-14 01:35:09
【问题描述】:
我已经多次查看dplyr 的文档,它表明dplyr::rename_all 是dplyr::rename 的“范围”变体。有人可以解释这在语法和功能方面意味着什么吗?为什么使用一个与另一个? dplyr 的文档对此并不清楚。
【问题讨论】:
我已经多次查看dplyr 的文档,它表明dplyr::rename_all 是dplyr::rename 的“范围”变体。有人可以解释这在语法和功能方面意味着什么吗?为什么使用一个与另一个? 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() 包装器。变量名不是函数或表达式。这是一个符号。
.funs 用 funs() 或在 quosure 中引用的单个表达式,a 字符串命名函数或函数。
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
这里是一个“quosure 中的单个表达式”的示例。
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)
rename、rename_all、rename_at 和 rename_if)给定家庭地址的范围,并且搜索“重命名”会在代码中找到所有内容。 setNames 有效,但请从包 rlang 中查看 set_names。它的工作方式类似于 setNames,但增加了一些功能。
cars %>% rename_all(~new_car_names) 不起作用,我刚刚尝试过:new_car_names <- c("a", "b") cars %>% rename_all( funs( ~new_car_names ) ) %>% head 并且它起作用了。这两行是无法执行还是无法为您重命名?
new_car_names <- c("a", "b"); cars %>% rename_all( funs( ~new_car_names ) ) %>% head 不适合我。