Asteroid098
Asteroid098

Reputation: 2825

selecting rows of which the value of the variable is equal to certain vector

I have a longitudinal data called df for more than 1000 people that looks like the following:

id  year    name    status  
1   1984    James   4   
1   1985    James   1   
2   1983    John    2   
2   1984    John    1   
3   1980    Amy     2   
3   1981    Amy     2   
4   1930    Jane    4   
4   1931    Jane    5   

I'm trying to subset the data by certain id. For instance, I have a vector dd that consists of ids that I would like to subset:

dd<-c(1,3)

I've tried the following but it did not work, for instance:

subset<-subset(df, subset(df$id==dd))

or

subset<-subset(df, subset(unique(df$id))==dd))

or

subset<-df[which(unique(df$id)==dd),]

or I tried a for-loop

for (i in 1:2){
  subset<-subset(df, subset=(unique(df$id)==dd[i]))
}

Would there be a way to only select the rows with the ids that match the numbers in in the vector dd?

Upvotes: 4

Views: 15522

Answers (2)

hvollmeier
hvollmeier

Reputation: 2986

As an alternative you can use 'dplyr' a new package (author: Hadley Wickham ) which provides a blazingly fast set of tools for efficiently manipulating datasets.

require(dplyr)

filter(df,id %in% dd )
  id year  name status

1  1 1984 James      4
2  1 1985 James      1
3  3 1980   Amy      2
4  3 1981   Amy      2

Upvotes: 1

Matthew Lundberg
Matthew Lundberg

Reputation: 42639

Use %in% and logical indexing:

df[df$id %in% dd,]
  id year  name status
1  1 1984 James      4
2  1 1985 James      1
5  3 1980   Amy      2
6  3 1981   Amy      2

Upvotes: 6

Related Questions