R 筛选列中包含向量中任何值的行

R 筛选列中包含向量中任何值的行,r,subset,R,Subset,我有一个数据集,其中有一列包含多个ICD-10代码,这些代码由空格分隔,例如 Identifier Codes 1 A14 R17 2 R069 D136 B08 3 C11 K71 V91 我有一个与我的分析相关的ICD-10代码向量,例如goodcodes一个技巧是将goodcodes组合成正则表达式: 库(dplyr) ptn% 过滤器(grepl(ptn,代码)) #识别码 #1 A14 R17 #2 3 C

我有一个数据集,其中有一列包含多个ICD-10代码,这些代码由空格分隔,例如

Identifier    Codes
1             A14 R17
2             R069 D136 B08
3             C11 K71 V91

我有一个与我的分析相关的ICD-10代码向量,例如
goodcodes一个技巧是将
goodcodes
组合成正则表达式:

库(dplyr)
ptn%
过滤器(grepl(ptn,代码))
#识别码
#1 A14 R17
#2 3 C11 K71 V91

另一种方法是将
code
列拆分为单个代码的列表,并在%
中查找
%的成员资格:

sapply(strsplit(trimws(dat$Codes),“\\s+”),函数(a)any(a%in%goodcodes))
#[1]对错对

根据事情的复杂程度,第三种方法是“unest”
code
并查找匹配项

dat%>%
突变(代码=strsplit(trimws(代码),“\\s+”))%>%
tidyr::unnest(代码)%%>%
分组人(标识符)%>%
过滤器(任何(代码%在%goodcodes中))%>%
解组()
##tibble:5 x 2
#识别码
#         
#1 A14
#21 R17
#3 3 C11
#43K71
#5.3 V91

(如果您真的喜欢像以前一样将它们组合成一个空格分隔的字符串,那么使用
groupby(Identifier)%%>%summary(code=paste(code,collapse=“”)
)就很容易了。就其本身而言,我不推荐这样做,因为我更喜欢像这样分解此类信息,但可能存在我不知道的上下文。)带有
子集
来自
基本R
。在“goodcodes”向量上循环,将其用作
grepl
中的模式,
逻辑
向量的
列表
减少为单个逻辑
向量
子集

subset(dat,  Reduce(`|`, lapply(goodcodes, function(x) grepl(x, Codes))))
#   Identifier       Codes
#1          1     A14 R17
#3          3 C11 K71 V91
数据
dat
dat <- structure(list(Identifier = 1:3, Codes = c("A14 R17", "R069 D136 B08", 
"C11 K71 V91")), class = "data.frame", row.names = c(NA, -3L))