我有三个data.frame
,每个都有一个名为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。
在进行匹配之前,如何扩展值列表?
数据大致为:
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
用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)
答案 0 :(得分:2)
您可以执行以下操作
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)
过滤步骤1
df1 <- DataFrame1[!(DataFrame1$col %in% DataFrame2$col), ]
# col data
#3 c 3
#4 d 4
#5 e 5
过滤步骤2
df2 <- df1[!(df1$col %in% unlist(strsplit(as.character(DataFrame3$col), ";"))), ]
df2
# col data
#5 e 5
或在dplyr
链中相同
library(dplyr)
DataFrame1 %>%
filter(!(col %in% DataFrame2$col)) %>%
filter(!(col %in% unlist(str_split(DataFrame3$col, ";"))))
# col data
#1 e 5