根据其他数据帧中的列表子集数据帧

问题描述 投票:0回答:1

我有三个data.frames,每个都有一个名为col的列。我想过滤掉DataFrame1的所有行,col的值为abcdDataFrame2出现在subset(DataFrame1, !(col %in% DataFrame2$col)) 。为此,我正在使用

DataFrame3

a;b;c包含值列表,例如c;d;acola。同样在这种情况下,我想根据bcdDataFrame3DataFrame1 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)
r dataframe subset
1个回答
2
投票

您可以执行以下操作

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
© www.soinside.com 2019 - 2024. All rights reserved.