假设我有两个这样的数据框:
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
答案 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