【发布时间】:2018-11-10 22:08:42
【问题描述】:
所以,我在 R 中有如下数据表:
Claim failure Part code matchcode
23 F1 P1 A B,A,C
23 F1 P1 D B,A,C
23 F2 P2 D B,A,C
23 F2 P2 E B,A,C
45 F1 P4 X Y,Z,X
45 F1 P4 Y Y,Z,X
45 F1 P4 A Y,Z,X
45 F1 P1 F Y,Z,X
45 F1 P1 H Y,Z,X
所以这里的想法是针对每个组(索赔、失败和部分),如果“代码”中的“任何”代码与“匹配代码”列中的代码列表匹配,那么组应该将匹配列设置为 True。
所以预期的输出应该如下:
Claim failure Part Match
23 F1 P1 TRUE
23 F2 P2 FALSE
45 F1 P4 TRUE
45 F1 P1 FALSE
此 data.table 的大小很大,因此需要优化的解决方案。 请帮忙:)
【问题讨论】:
-
如果你想向量化/优化正则表达式操作,总是使用 stringi 包。这将远远快于任何替代方案(至少我知道)。出于您的目的,我只会做
library(stringi) ; DT[, .(Match = any(stri_detect_fixed(matchcode, code))), by = .(Claim, failure, Part)]。我也会做一些搜索,因为矢量化grepl已经讨论过很多次了
标签: r data.table