[R] Subsetting multiple rows of a data frame at once

arun smartpink111 at yahoo.com
Wed Jul 3 13:37:13 CEST 2013


Hi,
Try this:

set.seed(24)
df<- data.frame(x=sample(seq(0.25,4.25,by=.05),1e5,replace=TRUE),y= sample(seq(0.10,1.05,by=.05),1e5,replace=TRUE),z=rnorm(1e5))

#Used a shorter vector 
x1<- c(1.05,2.85,3.40,4.25,0.25)
y1<- c(0.25,0.10,0.90,0.25,1.05)

res<-do.call(rbind,lapply(seq_along(x1),function(i) subset(df,x==x1[i]&y==y1[i])))
head(res,2)
#        x    y          z
#466  1.05 0.25  0.7865224
#4119 1.05 0.25 -1.5679096
 tail(res,2)
#         x    y          z
#98120 0.25 1.05 -2.1239596
#98178 0.25 1.05  0.3321464


A.K.

Hi Everyone, 

First time poster so any posting rules i should know about feel free to advise... 

I've got a data frame of 250 000 rows in columns of x y and z. 

i need to extract 20-30 rows from the data frame with specific x
 and y values, such that i can find the z value that corresponds. There 
is no repeated data. (its actually 250 000 squares in a 5x5m grid) 

to find them individually i can use subset successfully 

result<-subset(df,x==1.05 & y==c0.25) 

gives me the row in the dataframe with that x and y value. 

so if i have 

x = 1.05 2.85 3.40 4.25 0.25 3.05 3.70 0.20 0.30 0.70 1.05 1.20 
1.40 1.90 2.70 3.25 3.55 4.60 2.05 2.15 3.70 4.85 4.90 1.60 2.45 3.20 
3.90 4.45 

and 

y= 0.25 0.10 0.90 0.25 1.05 1.70 2.05 2.90 2.35 2.60 2.55 2.15 
2.75 2.05 2.70 2.25 2.55 2.05 3.65 3.05 3.00 3.50 3.75 4.85 4.50 4.50 
3.35 4.90 

then how can i retrieve the rows for all those values at once. 

if i name x=xt and y=yt and then 

result<-subset(df,x==xt & y==yt) 

then i get 

result 
[1] x      y      Height 
<0 rows> (or 0-length row.names) 

i dont understand why zero rows are selected. obviously im 
applying the vectors inappropriately, but i cant seem to find anything 
on this method of subsetting online. 

Thanks for any replies!   




More information about the R-help mailing list