从存在于另一个数据帧R中的一个数据帧中删除数据

从存在于另一个数据帧R中的一个数据帧中删除数据,r,R,我想从另一个数据帧中存在的数据帧中删除数据。让我举一个例子: letters<-c('a','b','c','d','e') numbers<-c(1,2,3,4,5) list_one<-data.frame(letters,numbers) 字母基本R溶液 list_one[!list_one$letters %in% list_two$letters2,] 给你: letters numbers 2 b 2 5 e

我想从另一个数据帧中存在的数据帧中删除数据。让我举一个例子:

letters<-c('a','b','c','d','e')
numbers<-c(1,2,3,4,5)
list_one<-data.frame(letters,numbers)
字母基本R溶液

list_one[!list_one$letters %in% list_two$letters2,]
给你:

  letters numbers
2       b       2
5       e       5
说明:

> list_one$letters %in% list_two$letters2
[1]  TRUE FALSE  TRUE  TRUE FALSE
这将为您提供一个向量
LENGTH==LENGTH(list\u one$letters)
,其值为真/假<代码>对该向量求反。因此,如果值出现在列表2$letters2中,则最终会出现假/真值

如果您对如何从data.frame中选择行有疑问,请输入

?`[.data.frame`

转到控制台并阅读。

答案是对编辑的响应: “所以我真的不能用否定的表达。”

我想最有效的方法之一是使用
数据

require(data.table)
setDT(list_one)
setDT(list_two)
list_one[!list_two, on=c(letters = "letters2")]

(感谢弗兰克的改进)

结果:

   letters numbers
1:       b       2
2:       e       5
查看
?“data.table”
以及为什么首先使用
data.table::fread
读取csv文件

顺便说一句:如果你有
字母2
而不是
列表2
,你可以使用

list_one[!J(letters2)]
dplyr解决方案

library(dplyr)

list_one %>% anti_join(list_two)

仅供参考,
字母
实际上是一个常量/内置向量,就像
字母
list_one[!J(letters2)]
library(dplyr)

list_one %>% anti_join(list_two)