Sql 具有复杂条件的数据帧的R子集

Sql 具有复杂条件的数据帧的R子集,sql,r,Sql,R,我有一个名为df1的数据集。它有一个ID列和一些其他列,例如Date(Posixt)、Price、情绪(均为数字)等 我有两个子集df1,它们是df2和df3(可能有一些重叠)。我想从df1中删除df2和df3的所有行(或df1-(df2u-df3),U是union) 我已经尝试过子集,但是要获得select参数确实不容易,因为它不是像ID这样的直接条件=100 当然,循环必须是这个问题的解决方案,但它花费了太多的时间,而且看起来非常难看。 有没有一种像向量或矩阵运算这样的方法可以快速而简洁地实

我有一个名为
df1
的数据集。它有一个
ID
列和一些其他列,例如
Date(Posixt)
Price
情绪
(均为数字)等

我有两个子集
df1
,它们是
df2
df3
(可能有一些重叠)。我想从
df1
中删除
df2
df3
的所有行(或
df1-(df2u-df3)
U
是union)

我已经尝试过子集,但是要获得
select
参数确实不容易,因为它不是像
ID这样的直接条件=100

当然,循环必须是这个问题的解决方案,但它花费了太多的时间,而且看起来非常难看。

有没有一种像向量或矩阵运算这样的方法可以快速而简洁地实现这一点?

您可以使用布尔索引

1.生成数据 2.分成两个子集,每5行 3.索引行 要点是只保留不在子集ID中的ID(
操作符)。管道
|
字符是
语句——如果id在这两个子集中的任何一个子集中,我们就消除它

data[!(data$id %in% data.1$id | data$id %in% data.2$id),]

您可以使用
[
函数直接索引到df1对象中,而不是使用
subset()
。我们只需要创建一个具有所需条件的逻辑向量。为此,我们将使用%
函数中的
%和一些求反。这似乎可以做到:

df1 <- data.frame(id = 1:10, foo = rnorm(10), bar = runif(10))

#Randomly sample three rows to create df2 and df3
set.seed(2)
df2 <- df1[sample(1:10, 3, FALSE), ]
df3 <- df1[sample(1:10, 3, FALSE), ]

#what IDs are in df2 and df3?
c(df2$id, df3$id)
#--
[1] 2 7 5 2 9 8

#OK, so we want to get id's 1,3,4,6,10
df1[!(df1$id %in% c(df2$id, df3$id)),]
#--
   id        foo       bar
1   1 -0.5656801 0.8613120
3   3  0.1252706 0.5147147
4   4  1.3532248 0.8224739
6   6  0.3225545 0.9746704
10 10  2.1502097 0.9939075
df1
data[!(data$id %in% data.1$id | data$id %in% data.2$id),]
df1 <- data.frame(id = 1:10, foo = rnorm(10), bar = runif(10))

#Randomly sample three rows to create df2 and df3
set.seed(2)
df2 <- df1[sample(1:10, 3, FALSE), ]
df3 <- df1[sample(1:10, 3, FALSE), ]

#what IDs are in df2 and df3?
c(df2$id, df3$id)
#--
[1] 2 7 5 2 9 8

#OK, so we want to get id's 1,3,4,6,10
df1[!(df1$id %in% c(df2$id, df3$id)),]
#--
   id        foo       bar
1   1 -0.5656801 0.8613120
3   3  0.1252706 0.5147147
4   4  1.3532248 0.8224739
6   6  0.3225545 0.9746704
10 10  2.1502097 0.9939075