从存在于另一个数据帧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)