使用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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...