簡體   English   中英

使用 rename_all 從列名中刪除后綴?

[英]Removing suffix from column names using rename_all?

我有一個包含多個列的數據框,格式為 var1.mean、var2.mean。 我想從包含它的所有列中刪除后綴“.mean”。 我嘗試在管道中將 rename_all 與正則表達式結合使用,但無法提出正確的語法。 有什么建議嗎?

如果你想使用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$", "", .)))

我們可以使用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

注意:如果列名重復,則需要使用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)))))

您可以使用gsub

colnames(df) <- gsub('.mean','',colnames(df))

使用新的 dplyr:

df %>% rename_with(~str_remove(., '.mean'))

以下對我有用

dat <- data.frame(var1.mean = 1, var2.mean = 2)
col_old <- colnames(dat)
col_new <- gsub(pattern = ".mean",replacement = "", x  = col_old)
colnames(dat) <- col_new

您可以使用stringistri_replace_last_regex函數替換此名稱,如下所示:

require(stringi)
df <- data.frame(1,2,3,4,5,6)
names(df) <- stri_paste("var",1:6,c(".mean",".sd"))
df
##  var1.mean var2.sd var3.mean var4.sd var5.mean var6.sd
##1         1       2         3       4         5       6
names(df) <- stri_replace_last_regex(names(df),"\\.mean$","")
df
##  var1 var2.sd var3 var4.sd var5 var6.sd
##1    1       2    3       4    5       6

正則表達式是\\\\.mean$因為您需要轉義點字符(它在正則表達式中具有特殊含義)並且您還可以在末尾添加$符號以確保僅替換以該模式結束的名稱(如果.mean文本位於字符串的中間,則不會被替換)。

我會使用字符串拆分:

x <- as.data.frame(matrix(runif(16), ncol = 4))
colnames(x) <- c("var1.mean", "var2.mean", "var3.mean", "something.else")

colnames(x) <- strsplit(colnames(x), split = ".mean")
colnames(x)

已經給出了很多快速答案,最直觀的,對我來說是:

Dframe <- data.frame(var1.mean = rnorm(10),        #Create Example
                     var2.mean = rnorm(10),
                     var1.sd = runif(10))
names(Dframe) <- gsub("[.]mean","",names(Dframe))  #remove ".mean"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM