看板 R_Language 關於我們 聯絡資訊
※ 引述《cywhale (cywhale)》之銘言: : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : : 若一字串的開頭與結尾只想留下英文字,我寫 : gsub("^[^a-zA-Z]+|[^a-zA-Z]+$", "", x) : 但若結尾是"sp." or "spp." 我想保留"." 這個符號不被上面這個式子濾掉 : 比如 "aaa bbb sp." 就維持原字串 : 但其他情況的"."應該要被濾掉 比如 "aaa bbb22." -> "aaa bbb" : 試了一些?: ?! 等語法都沒抓到,向大家請教~~ 謝謝~ str <- c("aaa bbb sp.", "aaa bbb sp2.") gsub("[^a-zA-Z]*([a-zA-Z. ]+).*", "\\1", str) ^ 這個空格要留著 不然會出事XD # [1] "aaa bbb sp." "aaa bbb sp" 我忘了問 會不會有 "aa2 bb3 cc." 要變成 "aa bb cc." 這種情況了? 有這種情況建議用regmatches,把 "aa", "bb", "cc."都抓出來,再處理QQ 大概像這樣(可能考慮還不夠周延): str <- c("aaa bbb sp.", "aaa bbb sp2.", "aa2 bb3 cc.") sapply(regmatches(str, gregexpr("[a-zA-Z. ]+", str)), function(x){ paste0(x[x != "."], collapse = "") }) # [1] "aaa bbb sp." "aaa bbb sp" "aa bb cc." -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.109.74.87 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1461920783.A.7D4.html
cywhale: C大厲害,目前case中沒有,但好奇要做該怎麼用呢?請教~ 04/29 17:14
剛剛就在想這個XD 看上面
cywhale: 另外如果是只保留"sp."這個特定pattern的.,其他濾掉呢? 04/29 17:18
cywhale: 比如"aaa ab." --> "aaa ab" 04/29 17:18
特定的話,可以這樣處理,但我記得有方法做排除,要再查一下XD 這樣處理比較像是硬幹XD str <- c("aaa bbb sp.", "aaa bbb sp2.", "aaa bbb ab.") str_grab <- gsub("[^a-zA-Z]*([a-zA-Z. ]+).*", "\\1", str) str_grab[which(!grepl("sp\\.", str_grab))] <- gsub("([a-zA-Z ]+)\\.*", "\\1", str_grab[which(!grepl("sp\\.", str_grab))]) str_grab # [1] "aaa bbb sp." "aaa bbb sp" "aaa bbb ab" ※ 編輯: celestialgod (140.109.74.87), 04/29/2016 17:38:23
cywhale: 甘溫啊~~ 我測試一下,順便也來查查看~先謝了! 04/29 22:47