2017-01-31 15 views
1

名獲得縮寫我敢肯定有一個更雄辯的方式:從R中

NAMES <- data.frame(ID = "George Washington") 
NAMES$ID <- as.character(NAMES$ID) 

gsub(" ", "", paste(substr(data.frame(strsplit(NAMES$ID, " "))[[1]], 1, 1), collapse=" ")) 

[1]「GW」

+0

使用'gsub(「[^ AZ] *([AZ])[^ AZ] *」,「\\ 1」,NAMES $ ID)' –

回答

2

我們可以匹配不在一個大寫一個或多個字符字母后面的大寫字母([^A-Z]+)(使用正則表達式環視 - (?<=[A-Z]))和一個空白(""

gsub("(?<=[A-Z])[^A-Z]+", "", NAMES$ID, perl = TRUE) 
#[1] "GW" 

或者沒有環視替代它並使用捕獲組。我們捕捉大寫字母爲一組,然後一個或多個非大寫字母與反向引用(\\1

gsub("([A-Z])[^A-Z]+", "\\1", NAMES$ID) 
#[1] "GW" 

爲安全起見,我們還可以包括字邊界

gsub("(\\b[A-Z])[^A-Z]+", "\\1", NAMES$ID) 
更換
+1

當我對我的基準進行測試並且您的第一個似乎是最快的。 – SCDCE

+0

@謝謝你的評論。原因可能是代碼中有多個函數,這可能會減慢進程速度 – akrun