我有三个data.frame
s,每个都有一个名为col
的列。我想过滤掉DataFrame1
的所有行,col
的值为a
。 b
,c
,d
和DataFrame2
出现在subset(DataFrame1, !(col %in% DataFrame2$col))
。为此,我正在使用
DataFrame3
a;b;c
包含值列表,例如c;d;a
,col
的a
。同样在这种情况下,我想根据b
中c
,d
,DataFrame3
和DataFrame1 DataFrame2 DataFrame3
col data col data col data
a 1 a 6 a;b;c 8
b 2 b 7 c;d;b 9
c 3
d 4
e 5
的出现来过滤DataFrame1。
在进行匹配之前如何扩展值列表?
数据大致如下:
DataFrame2
用DataFrame1
过滤后,我留在了col data
c 3
d 4
e 5
DataFrame3
用DataFrame1
过滤后,我希望只有col data
e 5
DataFrame1 <- data.frame(col = letters[1:5], data = 1:5)
DataFrame2 <- data.frame(col = letters[1:2], data = 6:7)
DataFrame3 <- data.frame(col = c("a;b;c", "c;d;b"), col = 8:9)
数据:
DataFrame1 <- data.frame(col = letters[1:5], data = 1:5)
DataFrame2 <- data.frame(col = letters[1:2], data = 6:7)
DataFrame3 <- data.frame(col = c("a;b;c", "c;d;b"), col = 8:9)
您可以执行以下操作
df1 <- DataFrame1[!(DataFrame1$col %in% DataFrame2$col), ]
# col data
#3 c 3
#4 d 4
#5 e 5
过滤步骤1
df2 <- df1[!(df1$col %in% unlist(strsplit(as.character(DataFrame3$col), ";"))), ]
df2
# col data
#5 e 5
过滤步骤2
dplyr
或者在library(dplyr)
DataFrame1 %>%
filter(!(col %in% DataFrame2$col)) %>%
filter(!(col %in% unlist(str_split(DataFrame3$col, ";"))))
# col data
#1 e 5
链中相同
qazxswpoi