基于另一个子集数据框

时间:2013-09-09 16:26:02

标签: r

我有两个数据框,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中。

这样做的最佳方式是什么?

谢谢!

2 个答案:

答案 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)),]