看板 R_Language 關於我們 聯絡資訊
※ 引述《Edster (Edster)》之銘言: : : - 問題: 當你想要問問題時,請使用這個類別 : : [問題類型]: : : 效能諮詢(我想讓R 跑更快) : : [軟體熟悉度]: : 請把以下不需要的部份刪除 : 開發者(有撰寫R 的套件經驗) : [問題敘述]: : 一個簡單的問題 : 一堆字串中,想要擷取/篩選複數條件的字串 : 例如 : "./zw1_agriculture.txt" : "./zw1_agriculture.txt.xml" : "./zw1_bareland.txt" : "./zw1_bareland.txt.xml" : "./zw1_built_up.txt" : "./zw1_built_up.txt.xml" : "./zw1_forest.txt" : "./zw1_forest.txt.xml" : "./zw1_mining.txt" : "./zw1_mining.txt.xml" : "./zw1_watersurface.txt" : "./zw1_watersurface.txt.xml" : 等等 : 只有下面的方法嗎? : for(i in c("mining","watersurface","xml")) f = f[grep(i, f, invert = TRUE)] : 我試著用lapply,但最後還需要取交集,不算好用,不如用for. : f = lapply(c("mining","watersurface","xml"), : FUN=function(x){f = f[grep(x, f, invert = TRUE)]; return(f)}) : [關鍵字]: : : grep, 複選 : strs <- c( "./zw1_agriculture.txt", "./zw1_agriculture.txt.xml", "./zw1_bareland.txt", "./zw1_bareland.txt.xml", "./zw1_built_up.txt", "./zw1_built_up.txt.xml", "./zw1_forest.txt", "./zw1_forest.txt.xml", "./zw1_mining.txt", "./zw1_mining.txt.xml", "./zw1_watersurface.txt", "./zw1_watersurface.txt.xml") strToFind <- c("mining", "watersurface", "xml") library(stringr) outStr <- setdiff(strs, str_subset(strs, paste(strToFind, collapse = "|"))) f <- strs for(i in c("mining","watersurface","xml")) f = f[grep(i, f, invert = TRUE)] all.equal(outStr, f) # TRUE -- 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), 來自: 36.235.43.110 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1476269433.A.667.html
Edster: 感謝提點,我把另一種寫法回在上面。原來 "字串|字串" 10/12 20:44
Edster: 可以這樣用 10/12 20:44