使用rename_all从列名中删除后缀?

lin*_*nda 10 r tidyverse

我有一个数据框,其中包含var1.mean,var2.mean形式的多列.我想从包含它的所有列中删除后缀".mean".我尝试在管道中使用rename_all和regex,但无法提供正确的语法.有什么建议?

Ben*_*min 14

如果你想使用这个dplyr包,我建议你使用这个rename_at功能.

Dframe <- data.frame(var1.mean = rnorm(10),
                     var2.mean = rnorm(10),
                     var1.sd = runif(10))

library(dplyr)

Dframe %>% 
  rename_at(.vars = vars(ends_with(".mean")),
            .funs = funs(sub("[.]mean$", "", .)))
Run Code Online (Sandbox Code Playgroud)

  • `funs` 和 `rename_at` 已被弃用/取代。您现在应该使用 `rename_with(~ gsub("[.]mean$", "", .x)` (3认同)

akr*_*run 9

我们可以用 rename_all

df1 %>%
   rename_all(.funs = funs(sub("\\..*", "", names(df1)))) %>%
   head(2)
#        var1        var2       var3       var1       var2       var3
#1 -0.5458808 -0.09411013  0.5266526 -1.3546636 0.08314367  0.5916817
#2  0.5365853 -0.08554095 -1.0736261 -0.9608088 2.78494703 -0.2883407
Run Code Online (Sandbox Code Playgroud)

注意:如果列名称重复,则需要使其唯一 make.unique

数据

set.seed(24)
df1 <- as.data.frame(matrix(rnorm(25*6), 25, 6, dimnames = list(NULL,
             paste0(paste0("var", 1:3), rep(c(".mean", ".sd"), each = 3)))))
Run Code Online (Sandbox Code Playgroud)


小智 8

使用新的 dplyr:

df %>% rename_with(~str_remove(., '.mean'))
Run Code Online (Sandbox Code Playgroud)


Sig*_*ten 6

您可以使用gsub.

colnames(df) <- gsub('.mean','',colnames(df))
Run Code Online (Sandbox Code Playgroud)