我在基于列中的多个值过滤数据框时遇到一些问题。
我有两个看起来像这样的数据框:
第一个数据帧:
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进行过滤,
r $ r == m $ c所有值完全匹配,其中r的结果元组为(“ 100,111,123”;“ 42,57)
r $ r〜m $ c其中,一个元素(元素在两侧均被“,”除)足以保留该行,其中r的结果元组为(“ 100”;“ 3”) ,(“ 100,111”;“ 3,6,7”)和(“ 100,111,123”;“ 42,57”)
任何帮助将不胜感激。预先感谢!
答案 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