部分字符串匹配或分离或拆分上的 R 子集数据帧

R subsetting dataframe on partial string match or separating or split

我正在尝试通过部分字符串匹配对数据帧进行子集化。拆分和比较也可能有效,因为字符串可以被“|”拆分 我相信我在过去的类似案例中使用过 %in% 但它不适用于此。 有什么建议吗?

df <- read.table(text="
col1    cOL2      
1   '2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47'
2   '2.16.840.1.113883.10.20.22.4.4 | 2.16.840.1.113883.10.20.22.4.4 | 2.16.840.1.113883.10.20.22.4.64'
3   '2.16.840.1.113883.10.20.22.4.64 | 2.16.840.1.113883.10.20.22.4.78 | 2.16.840.1.113883.10.20.1.47'
4    '2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47'
5   '2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47'
", header=T, stringsAsFactors=FALSE)
df[which(df$cOL2 == 1 & df$cOL2 %in% '2.16.840.1.113883.10.20.22.4.19' ),]

一个 tidyverse 选项。

library(tidyverse)

filter(df, str_detect(cOL2, '2.16.840.1.113883.10.20.22.4.19'))

#      col1                                                                                             cOL2
#    1    1 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47
#    2    4 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47
#    3    5 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47

坚持[]你可以做以下事情。

library(tidyverse)

df[str_detect(df$cOL2, '2.16.840.1.113883.10.20.22.4.19'),]

使用基础 R 函数,您可以:

subset(df, grepl('2.16.840.1.113883.10.20.22.4.19', cOL2))
  col1                                                                                             cOL2
1    1 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47
4    4 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47
5    5 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.22.4.19 | 2.16.840.1.113883.10.20.1.47