web-dev-qa-db-ja.com

一致しないデータフレームから行を選択するにはどうすればよいですか?

データフレーム内の一致しない値を特定しようとしていますが、これを行う方法がわかりません。

_# 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,]
_

a = c(1,2,3)が機能する場合、abの倍数であるためです。ただし、データフレームyからすべての値を選択しようとしていますが、これらはxに含まれておらず、使用する関数がわかりません。

29
djq

正しく理解できれば、_%in%_演算子の否定が必要です。このような何かが動作するはずです:

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

_> subset(b, !(y %in% a$x))
  y
5 5
6 6
_
49
Chase

差分設定関数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
21
Ramnath

このタスクにdplyrを使用することもできます。 bにあるがaにないものを見つけるには:

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

#   y
# 1 5
# 2 6
6
Joe