[問題] 有效率的字串比對方法

看板R_Language作者 (培根)時間7年前 (2018/01/08 16:05), 編輯推噓0(004)
留言4則, 1人參與, 7年前最新討論串1/1
代朋友發問,希望格式沒有錯 [問題類型]: 是否有更有效率的字串比對方法 [軟體熟悉度]: 入門(寫過其他程式,只是對語法不熟悉) [問題敘述]: 版上各位前輩好,最近遇到處理比對字串的問題。欲處理的問題大概是這樣,想從 main 裡的字串內,找尋是否有匹配 match_list 裡的 element (不分大小寫),若有,則在新建立的變數 impute_name 裡填上匹配到的element。 目前可以用這種方法用迴圈讓每一個 element 都找一次,但是我的 match_list 其實很長,效率不彰,想請問是否有比較有效率的方法。 [程式範例]: main <- data.table(string = c("NIKE is good", "how about adidas", "something else")) match_list <- data.table(brand = c("Nike","Puma","Adidas")) for(j in seq_along(match_list$brand)){ main[str_detect(str_to_lower(string),str_to_lower(match_list$brand[j])) ,impute_name := match_list$brand[j] ] } [環境敘述]: R version 3.4.2 (2017-09-28) Platform: x86_64-w64-mingw32/x64 (64-bit) Windows 8.1 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 198.13.33.248 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1515398751.A.6BF.html

01/08 16:12, 7年前 , 1F
main[ , impute_name := str_extract(str_to_lower(
01/08 16:12, 1F

01/08 16:12, 7年前 , 2F
string), str_c(str_to_lower(match_list$brand),
01/08 16:12, 2F

01/08 16:12, 7年前 , 3F
collapse = "|"))]
01/08 16:12, 3F

01/08 16:17, 7年前 , 4F
另外,你迴圈裡面改成用set應該效率會比較好
01/08 16:17, 4F
文章代碼(AID): #1QKoPVQ_ (R_Language)
文章代碼(AID): #1QKoPVQ_ (R_Language)