"R Heberto Ghezzo, Dr" <heberto.ghezzo@mcgill.ca> wrote on 08/01/2012 
08:06:30 AM:
> 
> Hello,
> I have a big data frame where consecutive time dates and 
> corresponding observed values for each subject (ID) are on a line. I
> want to compute the linear slope for each subject. I would like to 
> use apply but I do
> not know how to express the corresponding function. An example using
> a loop follows 
> #
> # create dummy data set There are missing values
>  a <- c(1,2,3,4, 1,1,1,1, 2,2,3,3, 3,4,NA,4, 5,5,5,5,
>             2.1,2.2,2.3,2.4, 2.3,2.4,2.6,2.6, 2.5,2.6,2.9,3,
>             2.6,NA,3.2,4)
> a <- matrix(a, nr=4)
> aa <- as.data.frame(a)
> names(aa) <- c("ID","X1","X2","X3","X4","Y1","Y2","Y3","Y4")
> #
> #  I want the regression coefficientes of the Y on the X for each ID
> #
> sl <- rep(NA,4)
> for(i in 1:4) {
>   x1 <- a[i,2:5]
>   y1 <- a[i,6:9]
>   sl[i] <- lm(y1 ~ x1)$coef[2]
> }
> sl
> #
> #   I would like to use apply on the data.frame aa but with which 
function?
> #
> sl <- apply(aa,1,FUN) # FUN = ??
> #


Thanks for providing example data!  Very helpful.
You would have to write your own function to operate on each row of the 
data frame.
For example,

sl <- apply(aa, 1, function(dat) lm(dat[6:9] ~ dat[2:5])$coef[2])

I'm not sure how much faster this will be for your big data frame.

Jean


> Thanks for any help
> 
> R.Heberto Ghezzo Ph.D.
> Montreal - Canada

	[[alternative HTML version deleted]]

