如何在两个数据帧之间提取非常见记录?

时间:2014-06-30 17:56:59

标签: r dataframe

假设我有两个这样的数据框:

set.seed(123)
a<-data.frame(x=rep(letters[1:3], each=3),
      y=sample(1:3, 9, T))   

b<-data.frame(x=rep(letters[1:4], each=4),
      y=sample(1:3, 16, T))   

如何使用以下结果提取它们之间的非常见记录:

a 1
b 2
c 2
d 2
d 3

3 个答案:

答案 0 :(得分:2)

这是另一种方式:

x <- rbind(unique(a), unique(b))
x[! (duplicated(x) | duplicated(x, fromLast=TRUE)),]

   x y
1  a 1
7  c 2
5  b 2
9  c 1
13 d 3
14 d 2

答案 1 :(得分:1)

一种(有点长的)方式

sort(union(paste(b$x, b$y), paste(a$x, a$y))[!union(paste(b$x, b$y), paste(a$x, a$y)) %in% intersect(paste(b$x, b$y), paste(a$x, a$y))]) 

## [1] "a 1" "b 2" "c 1" "c 2" "d 2" "d 3"

或者

sort(c(setdiff(paste(a$x, a$y), paste(b$x, b$y)), setdiff(paste(b$x, b$y), paste(a$x, a$y))))

答案 2 :(得分:1)

您也可以使用:

x1 <- rbind(unique(a), unique(b))
res <- as.data.frame(table(x1))
 res[res$Freq==1,-3] #order is different
 #   x y
#1  a 1
#3  c 1
#6  b 2
#7  c 2
#8  d 2
#12 d 3