试图通过删除第二个表中的项来子集R中的数据表

试图通过删除第二个表中的项来子集R中的数据表,r,data.table,R,Data.table,我在R中有两个数据帧(来自csv文件),如下所示: df1 <- data.frame(V1 = 1:9, V2 = LETTERS[1:9]) df2 <- data.frame(V1 = 1:3, V2 = LETTERS[1:3]) 现在,我想返回一个表,它看起来像dt1,但是在dt2中找不到键的任何行。因此,在这种情况下,我想回到: 4 D 5 E ... 9 I 我在R中使用以下代码: dt3 <- dt1[!dt2$V1] dt3您可以尝试: dt1[!(d

我在R中有两个数据帧(来自csv文件),如下所示:

df1 <- data.frame(V1 = 1:9, V2 = LETTERS[1:9])
df2 <- data.frame(V1 = 1:3, V2 = LETTERS[1:3])
现在,我想返回一个表,它看起来像
dt1
,但是在
dt2
中找不到键的任何行。因此,在这种情况下,我想回到:

4 D
5 E
... 
9 I
我在R中使用以下代码:

dt3 <- dt1[!dt2$V1]
dt3您可以尝试:

dt1[!(dt1$V1 %in% dt2$V1)]

这假设您不关心排序。

因为表是键控的,所以您可以使用“不联接”来执行此操作

在这种情况下,
dt2$V1
被读取为行号向量,而不是作为联接的一部分。看起来这就是“不选择”的意思,但我认为它可以更明确。当我读到上面的句子时,我知道“notselect”和“notjoin”是同一事物的两个术语。

删除列名“V1”以进行notjoin。表已经由V1设置了键

dt3 <- dt1[!dt2]

dt3如果一行的V1列中有1,则将该行踢出。本帖将解释
的当前行为,但行为更改后文档似乎未更新:提交了文档请求:
dt1 <- data.table(rep(1:3,2), LETTERS[1:6], key="V1")
#    V1 V2
# 1:  1  A
# 2:  1  D
# 3:  2  B
# 4:  2  E
# 5:  3  C
# 6:  3  F
dt2 <- data.table(1:2, letters[1:2], key="V1")
#    V1 V2
# 1:  1  a
# 2:  2  b

dt1[!.(dt2$V1)]
#    V1 V2
# 1:  3  C
# 2:  3  F
dt1[!(dt2$V1)]
#    V1 V2
# 1:  2  B
# 2:  2  E
# 3:  3  C
# 4:  3  F
dt3 <- dt1[!dt2]