簡體   English   中英

在 R 中,使用 gsub 從字符串中刪除子字符串模式

[英]In R, remove substring pattern from string with gsub

我們的數據庫中有一個字符串列,其中包含運動隊的值。 這些球隊的名稱有時會以球隊的排名為前綴,例如: (13) Miami (FL) 這里的 13 是邁阿密的排名,(FL) 表示這是佛羅里達州的邁阿密,而不是俄亥俄州的Miami (OH) ):

我們需要清理這個字符串,刪除(13)並只保留Miami (FL) 到目前為止,我們已經使用了gsub並嘗試了以下操作:

> gsub("\\s*\\([^\\)]+\\)", "", "(13) Miami (FL)")
[1] " Miami"

這是錯誤地刪除了 (FL) 后綴,並且它也沒有正確處理前面的空白區域。

編輯

這里有一些額外的學校名稱,以顯示我們正在使用的數據。 請注意,並非每所學校都有 (##) 前綴。:

c("North Texas", "Southern Methodist", "Texas-El Paso", 
  "Brigham Young", "Winner", "(12) Miami (FL)", "Appalachian State", 
  "Arkansas State", "Army", "(1) Clemson", 
  "(14) Georgia Southern")

您可以使用sub刪除括號中的數字,后跟空格。

sub("\\(\\d+\\)\\s", "", "(13) Miami (FL)")
#[1] "Miami (FL)"

正則表達式可以根據數據中的模式變得更嚴格。

我們可以匹配的開口(后面跟着一個或多個數字( \\\\d+ ),然后關閉) )和一個或多個空間( \\\\s+ )中,用空白替換( ""

sub("\\(\\d+\\)\\s+", "",  "(13) Miami (FL)")
#[1] "Miami (FL)"

使用 OP' 更新示例

sub("\\(\\d+\\)\\s+", "",  v1)
#[1] "North Texas"        "Southern Methodist" "Texas-El Paso"      "Brigham Young"      "Winner"             "Miami (FL)"        
#[7] "Appalachian State"  "Arkansas State"     "Army"               "Clemson"            "Georgia Southern"  

或者使用str_remove from stringr另一個選項

library(stringr)
str_remove("(13) Miami (FL)", "\\(\\d+\\)\\s+")

另一個基於stringr解決方案是:

str_extract(v1, "[A-Z].*")
 [1] "North Texas"        "Southern Methodist" "Texas-El Paso"      "Brigham Young"      "Winner"            
 [6] "Miami (FL)"         "Appalachian State"  "Arkansas State"     "Army"               "Clemson"           
[11] "Georgia Southern"

這將從第一個大寫字母開始提取所有內容(從而忽略不需要的排名)。

暫無
暫無

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

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