dplyr :: rename和dplyr :: rename_all之间的区别

use*_*648 5 r dplyr tidyverse

我已多次查看文档dplyr,它表明这dplyr::rename_all是一个"范围"变体dplyr::rename.有人能解释一下这对语法和功能有什么影响吗?为什么使用一个与另一个?该文档dplyr尚不清楚.

Moo*_*per 17

  • 用于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
Run Code Online (Sandbox Code Playgroud)


SoF*_*her 7

除了已经提到的情况之外,rename_all当您为现有变量分配了一整套列名替换时,它会派上用场.

当你试图将该变量传递给时,就会遇到困难rename_all..funs无论是否有funs()dplyr帮助文件中提到的包装器,将变量直接传递给第二个参数都不起作用.变量名不是函数或表达式.这是一个象征.

.funs用funs()或quosure引用的单个表达式,命名函数的函数或函数.

new_car_names <- c("a", "b")

# Won't work.
cars %>% rename_all( new_car_names ) %>% head
cars %>% rename_all( funs( new_car_names ) ) %>% head
Run Code Online (Sandbox Code Playgroud)

以下是一些"使用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
Run Code Online (Sandbox Code Playgroud)

这是一个"quosure中的单个表达式"的例子.

cars %>% rename_all( quo( quo(new_car_names) ) ) %>% head
Run Code Online (Sandbox Code Playgroud)

这是一个"函数"的例子(一个不使用它的参数).

cars %>% rename_all( function(.){new_car_names} ) %>% head
Run Code Online (Sandbox Code Playgroud)

最后,以"命名函数的字符串"为例.

test_function <- function(.){new_car_names}

cars %>% rename_all( "test_function" ) %>% head
Run Code Online (Sandbox Code Playgroud)

虽然这个问题没有提及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} )
Run Code Online (Sandbox Code Playgroud)

  • 不过,在这些情况下,您通常会使用 `cars %&gt;% setNames(new_car_names)`,不是吗?`cars %&gt;% rename_all( funs( ~new_car_names )) ` 不起作用。也许你的意思是 `cars %&gt;% rename_all(~new_car_names)` (2认同)