我有两个数据框,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”的观察。
这样做的最佳方法是什么?
谢谢!
我有两个数据框,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”的观察。
这样做的最佳方法是什么?
谢谢!
用于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
接受的答案仅有效,因为 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)),]