我有两个数据框,x和y。
x<-data.frame(id=c(1,2,3,4,5), g=c(21,52,43,94,35))
y<-data.frame(id=c(3,4,7), u=c(55, 77, 99))
我想将x子集仅包括带有“ID”的观察结果,这些观察结果也在y中。
这样做的最佳方式是什么?
谢谢!
答案 0 :(得分:6)
使用setdiff
排除df
> x[setdiff(x$id, y$id),]
id g
1 1 21
2 2 52
5 5 35
使用merge
包含df
> merge(x, y)
id g u
1 3 43 55
2 4 94 77
或寻找这个子集?
> x[intersect(x$id, y$id),]
id g
3 3 43
4 4 94
答案 1 :(得分:1)
接受的答案是有效的,因为x $ id中的值3和4碰巧位于第3行和第4行。将获得错误的答案,例如,如果:
x<-data.frame(id=c(1,3,2,4,5), g=c(21,52,43,94,35))
x[intersect(x$id, y$id),]
id g
3 2 43
4 4 94
无论公共元素的位置如何,以下内容都能正常工作:
x[is.element(x$id,intersect(x$id,y$id)),]