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

arun smartpink111 at yahoo.com
Thu Jul 4 07:14:39 CEST 2013


Hi,

carbon.fit = expand.grid(list(x=seq(0, 5, 0.01), y=seq(0, 5, 0.01)))
 dim(carbon.fit)
#[1] 251001      2


 xtNew<-sprintf("%.2f",xt)
 ytNew<- sprintf("%.2f",yt)
 carbon.fit[]<- lapply(carbon.fit,function(x) sprintf("%.2f",x))
res<-do.call(rbind,lapply(seq_along(xtNew),function(i) subset(carbon.fit,x==xtNew[i]&y==ytNew[i])))
 nrow(res)
#[1] 28
res
#          x    y
#12631  1.05 0.25
#5296   2.85 0.10
#45431  3.40 0.90
#12951  4.25 0.25
#52631  0.25 1.05
#85476  3.05 1.70
#103076 3.70 2.05
#145311 0.20 2.90
#117766 0.30 2.35
#130331 0.70 2.60
#127861 1.05 2.55
#107836 1.20 2.15
#137916 1.40 2.75
#102896 1.90 2.05
#135541 2.70 2.70
#113051 3.25 2.25
#128111 3.55 2.55
#103166 4.60 2.05
#183071 2.05 3.65
#153021 2.15 3.05
#150671 3.70 3.00
#175836 4.85 3.50
#188366 4.90 3.75
#243146 1.60 4.85
#225696 2.45 4.50
#225771 3.20 4.50
#168226 3.90 3.35
#245936 4.45 4.90
A.K.


________________________________
From: Shaun ♥ Anika <pro_patto at hotmail.com>
To: "smartpink111 at yahoo.com" <smartpink111 at yahoo.com> 
Sent: Thursday, July 4, 2013 12:08 AM
Subject: RE: Subsetting multiple rows of a data frame at once




Hi There,
i can give you the data needed to perform this task...

library(akima)
library(fields)

xt<- c(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)

yt<- c(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)

xs<- c(0.45, 1.05, 2.75, 3.30, 4.95, 0.40, 1.05, 2.30, 3.45, 4.60, 0.05, 1.95, 2.95, 3.70, 4.55, 0.75, 1.60, 2.10, 3.60, 4.90, 0.05, 1.35, 2.60, 3.40, 4.25)

ys<- c(0.45, 0.95, 0.75, 0.95, 0.10, 1.90, 1.45, 1.25, 1.45, 1.05, 2.85, 2.60, 2.05, 2.60, 2.55, 3.75, 3.30, 3.95, 3.45, 3.70, 4.95, 4.35, 4.55, 4.40, 4.95)

carbon<- c(1.43, 1.82, 1.40, 1.43, 1.96, 1.61, 1.91, 1.53, 1.17, 1.83, 2.43, 2.02, 1.66, 2.45, 2.46, 1.39, 1.10, 1.38, 1.91, 2.13, 1.88, 1.26, 2.15, 1.89, 1.69)

carbon.df=data.frame(x=xs,y=ys,z=carbon)
carbon.loess= loess(z~x*y, data= carbon.df, degree= 2)
carbon.fit = expand.grid(list(x=seq(0, 5, 0.01), y=seq(0, 5, 0.01)))
z=predict(carbon.loess, newdata= carbon.fit)
carbon.fit$Height=as.numeric(z)
image.plot(seq(0,5,0.01,), seq(0,5,0.01), z, xlab = "", ylab="",main = "Carbon")

trees<-do.call(rbind,lapply(seq_along(xt),function(i) subset(carbon.fit,x==xt[i]&y==yt[i])))

## xt is 28 integers long and when i run the above code it only returns the values of 18 out of the 28 (xt,yt) pairs that i want. 

thanks for your help!!



More information about the R-help mailing list