2017-05-18 155 views
1

我必須用新字符串中的9個單詞寫入字符串的全部首字母。 有沒有更好的辦法做到這一點比:將字符串中所有單詞的第一個字母寫入新字符

eg <- "This is a test I developed" 
    temp.eg <- strsplit(eg,' ')[[1]] 
    temp.eg <- substr(temp.eg, 0, 1) 
    new.eg <- paste(temp.eg, collapse = "") 

此外,有沒有分割線的另一種方式,所以我沒有用:

strsplit() [[1]] 
+2

您的解決方案對我來說很好。你的意思是「有更好的辦法」嗎? –

+0

http://stackoverflow.com/questions/9721052/r-extract-part-of-string可能的重複 – akrun

回答

3

您可以使用GSUB提取第一個字母和單詞邊界(\\b):

gsub("\\b(\\w)(\\b|(\\w+))(|$)", "\\1", eg) 
[1] "TiatId" 

說明:你問了一個 「字」 CHARAC ter(\\w),後面是單詞邊界,後面跟着單詞邊界或更多單詞字符,然後是空格或字符串的末尾($)。


通過@lukeA給出另一種選擇:

gsub("(?<!\\b).|\\s", "", eg, perl=TRUE) 
[1] "TiatId" 

它採用向後看(?<!:之前一定不能...)爲 「抑制」(被取代空字符串)任何或任何不是字邊界的空格。

3

爲了避免[[子集,我們可以使用unlist,你的代碼的其餘部分看起來很好:

paste(substr(unlist(strsplit(eg, " ")), 1, 1), collapse = "") 
# [1] "TiatId" 

如果我們有一個以上的字符串:

egLong <- c("This is a test I developed", "another test me") 

sapply(strsplit(egLong, " "), function(i){ 
    paste(substr(i, 1, 1), collapse = "") 
    }) 
# [1] "TiatId" "atm" 
相關問題