使用dplyr重命名带有后缀的所有列名(列出的列名除外)?

Jaz*_*azz 4 r dplyr

我希望这是一个简单的问题。我如何重命名带有后缀“ _2017”的数据集中的所有列标题名称,但前两个列标题为“ Name”和“ State”除外?我想用dplyr做到这一点。

HBa*_*Bat 10

rename_if() rename_at()、 并rename_all()已被 取代rename_with()

df <- data.frame(Name = c('a', 'b'), State = c('c', 'd'), 
                 col1 = 1:2, col2 = 3:4)

# De-select by location
df %>% rename_with(~paste0(., "_2017"), -c(1:2))

#>   Name State col1_2017 col2_2017
#> 1    a     c         1         3
#> 2    b     d         2         4


# De-select by name 
df %>% rename_with(~paste0(., "_2017"), -c("Name", "State"))

#>   Name State col1_2017 col2_2017
#> 1    a     c         1         3
#> 2    b     d         2         4


# De-select using another variable that holds names
deselect_names <- c("Name", "State")
df %>% rename_with(~paste0(., "_2017"), -!!deselect_names)

#>   Name State col1_2017 col2_2017
#> 1    a     c         1         3
#> 2    b     d         2         4
Run Code Online (Sandbox Code Playgroud)


Psi*_*dom 5

您可以使用辅助方法使用rename_at和排除列vars

df <- data.frame(Name = c('a', 'b'), State = c('c', 'd'), col1 = 1:2, col2 = 3:4)
df
#  Name State col1 col2
#1    a     c    1    3
#2    b     d    2    4
Run Code Online (Sandbox Code Playgroud)

用硬编码名称排除:

df %>% rename_at(vars(-Name, -State), ~ paste0(., '_2017'))
#  Name State col1_2017 col2_2017
#1    a     c         1         3
#2    b     d         2         4
Run Code Online (Sandbox Code Playgroud)

按列位置排除:

df %>% rename_at(vars(-(1:2)), ~ paste0(., '_2017'))
#  Name State col1_2017 col2_2017
#1    a     c         1         3
#2    b     d         2         4
Run Code Online (Sandbox Code Playgroud)

按存储在变量中的列名排除:

to_exclude = c('Name', 'State')
df %>% rename_at(vars(-one_of(to_exclude)), ~ paste0(., '_2017'))
#  Name State col1_2017 col2_2017
#1    a     c         1         3
#2    b     d         2         4
Run Code Online (Sandbox Code Playgroud)