在 r 中使用 rename_at 从列名中删除后缀
remove suffix from column names using rename_at in r
我有一个数据框,其中有许多列以相同的后缀结尾,我想使用 rename_at() 将它们全部删除,但我无法弄清楚。
library(tidyverse)
my_df <- tibble(id = c(1, 2),
jan_real = c(8, 10),
feb_real = c(9, 10),
mar_real = c(1, 11))
desired_df <- tibble(id = c(1, 2),
jan = c(8, 10),
feb = c(9, 10),
mar = c(1, 11))
您可以在 setNames
内尝试 gsub
desired_df <- setNames(my_df,gsub("_.*","",names(my_df)))
这样
> desired_df
# A tibble: 2 x 4
id jan feb mar
<dbl> <dbl> <dbl> <dbl>
1 1 8 9 1
2 2 10 10 11
您现在应该使用 rename_with()
,它取代了 dplyr 1.0.0
中的 rename_at()
:
library(dplyr)
my_df %>%
rename_with(~ sub("_real$", "", .x), everything())
# A tibble: 2 x 4
id jan feb mar
<dbl> <dbl> <dbl> <dbl>
1 1 8 9 1
2 2 10 10 11
使用rename_at()
:
my_df %>%
rename_at(vars(everything()), ~ sub("_real$", "", .x))
在 base R
中,如果我们指定 whitespace
作为正则表达式来匹配 _
后跟字符(.*
)
names(my_df) <- trimws(names(my_df), whitespace = "_.*")
my_df
# A tibble: 2 x 4
# id jan feb mar
# <dbl> <dbl> <dbl> <dbl>
#1 1 8 9 1
#2 2 10 10 11
你可以试试这个方法
library(dplyr)
library(stringr)
my_df %>%
rename_at(vars(matches("_real")), ~str_remove(., "_real"))
# id jan feb mar
# <dbl> <dbl> <dbl> <dbl>
# 1 1 8 9 1
# 2 2 10 10 11
我有一个数据框,其中有许多列以相同的后缀结尾,我想使用 rename_at() 将它们全部删除,但我无法弄清楚。
library(tidyverse)
my_df <- tibble(id = c(1, 2),
jan_real = c(8, 10),
feb_real = c(9, 10),
mar_real = c(1, 11))
desired_df <- tibble(id = c(1, 2),
jan = c(8, 10),
feb = c(9, 10),
mar = c(1, 11))
您可以在 setNames
gsub
desired_df <- setNames(my_df,gsub("_.*","",names(my_df)))
这样
> desired_df
# A tibble: 2 x 4
id jan feb mar
<dbl> <dbl> <dbl> <dbl>
1 1 8 9 1
2 2 10 10 11
您现在应该使用 rename_with()
,它取代了 dplyr 1.0.0
中的 rename_at()
:
library(dplyr)
my_df %>%
rename_with(~ sub("_real$", "", .x), everything())
# A tibble: 2 x 4
id jan feb mar
<dbl> <dbl> <dbl> <dbl>
1 1 8 9 1
2 2 10 10 11
使用rename_at()
:
my_df %>%
rename_at(vars(everything()), ~ sub("_real$", "", .x))
在 base R
中,如果我们指定 whitespace
作为正则表达式来匹配 _
后跟字符(.*
)
names(my_df) <- trimws(names(my_df), whitespace = "_.*")
my_df
# A tibble: 2 x 4
# id jan feb mar
# <dbl> <dbl> <dbl> <dbl>
#1 1 8 9 1
#2 2 10 10 11
你可以试试这个方法
library(dplyr)
library(stringr)
my_df %>%
rename_at(vars(matches("_real")), ~str_remove(., "_real"))
# id jan feb mar
# <dbl> <dbl> <dbl> <dbl>
# 1 1 8 9 1
# 2 2 10 10 11