如何解决使用r中的rename_at从列名中删除后缀
我有一个数据框,其中有许多以相同的后缀结尾的列,并且我想使用rename_at()将其全部删除,但是我无法弄清楚。
library(tidyverse)
my_df <- tibble(id = c(1,2),jan_real = c(8,10),feb_real = c(9,mar_real = c(1,11))
desired_df <- tibble(id = c(1,jan = c(8,feb = c(9,mar = c(1,11))
解决方法
您现在应该使用rename_with()
取代了rename_at()
的{{1}}:
dplyr 1.0.0
使用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()
,
您可以尝试这种方法
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
,
您可以在gsub
内尝试setNames
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
,
在base R
中,如果我们指定trimws
作为正则表达式以匹配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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。