作者sFKP (培根)
看板R_Language
标题[问题] 有效率的字串比对方法
时间Mon Jan 8 16:05:49 2018
代朋友发问,希望格式没有错
[问题类型]: 是否有更有效率的字串比对方法
[软体熟悉度]: 入门(写过其他程式,只是对语法不熟悉)
[问题叙述]: 版上各位前辈好,最近遇到处理比对字串的问题。欲处理的问题大概是这样,想从 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://webptt.com/cn.aspx?n=bbs/R_Language/M.1515398751.A.6BF.html
1F:→ celestialgod: main[ , impute_name := str_extract(str_to_lower( 01/08 16:12
2F:→ celestialgod: string), str_c(str_to_lower(match_list$brand), 01/08 16:12
3F:→ celestialgod: collapse = "|"))] 01/08 16:12
4F:→ celestialgod: 另外,你回圈里面改成用set应该效率会比较好 01/08 16:17