所以,我在 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
所以这里的想法是针对每个组( claim 、失败和零件),如果“代码”中的“任何”代码与“匹配代码”列中的代码列表匹配,那么组应该将匹配列设置为 True。
所以预期的输出应该如下:
Claim failure Part Match
23 F1 P1 TRUE
23 F2 P2 FALSE
45 F1 P4 TRUE
45 F1 P1 FALSE
此 data.table 的大小非常大,因此需要优化的解决方案。 请帮助:)
最佳答案
...以及使用 data.table
的解决方案。
library(data.table)
grepl_v <- Vectorize(grepl)
DT[, .(Match = any(grepl_v(code, matchcode))), by = .(Claim, failure, Part)]
# Claim failure Part Match
#1: 23 F1 P1 TRUE
#2: 23 F2 P2 FALSE
#3: 45 F1 P4 TRUE
#4: 45 F1 P1 FALSE
数据
DT <- fread("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")
关于r - 如何按组或类别(按组)将列中的值与 R 中同一数据框中的其他列(具有多个值)匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53243908/