2

我有两个数据框,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 进行子集化,以仅包含在 y 中的带有“ID”的观察。

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

谢谢!

4

2 回答 2

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
于 2013-09-09T16:27:59.020 回答
3

接受的答案仅有效,因为 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)),]
于 2016-11-29T22:20:54.140 回答