R 筛选列中包含向量中任何值的行
我有一个数据集,其中有一列包含多个ICD-10代码,这些代码由空格分隔,例如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
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))