Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
762 views
in Technique[技术] by (71.8m points)

r - Subset a data frame based on another

I have two data frames, x and 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))

I want to subset x to include only the observations with "IDs" that are also in y.

What is the best way of doing this?

Thanks!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use setdiff to exclude observations appearing in both df

> x[setdiff(x$id, y$id),]  
  id  g
1  1 21
2  2 52
5  5 35

Use merge to include observations present in both df

> merge(x, y)
  id  g  u
1  3 43 55
2  4 94 77

or looking for this subset?

> x[intersect(x$id, y$id),]
  id  g
3  3 43
4  4 94

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...