簡體   English   中英

從列名中刪除數字和字符 r

[英]removing numbers and characters from column names r

我正在嘗試從 R 中的數據框中的列名中刪除特定的數字和字符,但我只能刪除數字,嘗試了不同的方式但仍將字符保留在末尾。

每一列都用字母表示,然后是括號中的數字; 例如日月光 (232)

DataFrame

Subject ASE (232) ASD (121) AFD (313)
   1        1.1.     1.2     1.3

所需的數據幀

Subject ASE ASD AFD
   1    1.1 1.2 1.3

代碼

colnames(data)<-gsub("[A-Z] ([0-9]+)","",colnames(data))

我們可能會更改代碼以匹配一個或多個空格 ( \\s+ ),后跟左括號 ( \\( ,一個或多個數字 ( \\d+ ) 和其他字符 ( .* ),並替換為空格 ( "" )

colnames(data) <- sub("\\s+\\(\\d+.*", "", colnames(data))
colnames(data)
[1] "Subject" "ASE"     "ASD"     "AFD"    

或者另一種選擇是trimws from base R

trimws(colnames(data), whitespace = "\\s+\\(.*")
[1] "Subject" "ASE"     "ASD"     "AFD"    

在 OP 的代碼中,它匹配一個大寫字母后跟空格,並且(是一個元字符,沒有轉義。因此在正則表達式模式下,它捕獲數字 ( ([0-9]+) )。但是,這與列名中的模式不匹配,因為在一個空格之后,有一個( ,它不匹配,因此它返回相同的字符串

gsub("[A-Z] ([0-9]+)","",colnames(data))
[1] "Subject"   "ASE (232)" "ASD (121)" "AFD (313)"

數據

data <- structure(list(Subject = 1L, `ASE (232)` = "1.1.", `ASD (121)` = 1.2, 
    `AFD (313)` = 1.3), class = "data.frame", row.names = c(NA, 
-1L))

你可以這樣做:

sub("(\\w+).*", "\\1", colnames(data))

這使用反向引用\\1來“記住”任何一系列字母數字字符\\w+並用記住的位替換sub的替換參數中的整個字符串。

我們可以使用來自stringr package 的wordrename_with

library(stringr)
library(dplyr)
data %>% 
  rename_with(~word(., 1))
  Subject  ASE ASD AFD
1       1 1.1. 1.2 1.3

暫無
暫無

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

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