根据一列中的多个值进行过滤

时间:2020-03-07 17:54:01

标签: r dataframe

我在基于列中的多个值过滤数据框时遇到一些问题。

我有两个看起来像这样的数据框:

第一个数据帧:

r <- data.frame(d = c("100", "100,111", "100,111,123", "112"), r = c("3", "3,6,7", "42,57", "7"))

第二个数据帧:

m <- data.frame(i = c("42,57", "6", "3,6"))

现在我要对r进行过滤,

  1. r $ r == m $ c所有值完全匹配,其中r的结果元组为(“ 100,111,123”;“ 42,57)

  2. r $ r〜m $ c其中,一个元素(元素在两侧均被“,”除)足以保留该行,其中r的结果元组为(“ 100”;“ 3”) ,(“ 100,111”;“ 3,6,7”)和(“ 100,111,123”;“ 42,57”)

任何帮助将不胜感激。预先感谢!

2 个答案:

答案 0 :(得分:1)

我们可以将subset%in%一起使用

subset(r, r %in% m$i)
#          d     r
#3 100,111,123 42,57

或者在第二种情况下

library(stringr)
library(dplyr)
r %>% 
    filter(str_detect(r, str_c(chartr(",", "|", m$i), collapse="|")))
#           d     r
#1         100     3
#2     100,111 3,6,7
#3 100,111,123 42,57

答案 1 :(得分:1)

一个选项:

r[r$r %in% m$i,]

#             d     r
# 3 100,111,123 42,57

r[sapply(seq_along(r$r), function(x) any(unlist(strsplit(as.character(r$r[x]), ',')) %in% unlist(strsplit(as.character(m$i), ',')))),]

#             d     r
# 1         100     3
# 2     100,111 3,6,7
# 3 100,111,123 42,57