如何从数据框中选择不匹配的行?

djq*_*djq 32 r dataframe

我正在尝试识别数据框中不匹配的值,但无法弄清楚如何执行此操作.

# make data frame 
a <- data.frame( x =  c(1,2,3,4)) 
b <- data.frame( y =  c(1,2,3,4,5,6))

# select only values from b that are not in 'a'
# attempt 1: 
results1 <- b$y[ !a$x ]

# attempt 2:  
results2 <- b[b$y != a$x,]
Run Code Online (Sandbox Code Playgroud)

如果a = c(1,2,3)这样可行,那么a就是多个b.不过,我想只要选择从数据帧中的所有值y,不在x,不知道什么函数使用.

Cha*_*ase 52

如果我理解正确,你需要否定%in%操作员.这样的事情应该有效:

subset(b, !(y %in% a$x))

> subset(b, !(y %in% a$x))
  y
5 5
6 6
Run Code Online (Sandbox Code Playgroud)


Ram*_*ath 22

尝试设置差异功能setdiff.所以你会的

results1 = setdiff(a$x, b$y)   # elements in a$x NOT in b$y
results2 = setdiff(b$y, a$x)   # elements in b$y NOT in a$x
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 7

您也可以使用dplyr此任务。要查找其中的内容,b但不是a

library(dplyr)    
anti_join(b, a, by = c("y" = "x"))

#   y
# 1 5
# 2 6
Run Code Online (Sandbox Code Playgroud)