another option that i think is easy & intuitive :)

library(sqldf)

mydata <- sqldf( "select Subject , Block , avg( Feature1 ) as Feature1 ,
avg( Feature2 ) as Feature2 , [..keep going..]  , avg( Feature10 ) as
Feature10 from yourdata group by Subject , Block" )




On Thu, Feb 21, 2013 at 4:45 PM, arun <smartpink...@yahoo.com> wrote:

> Hi,
>
> May be this helps:
>
> dat1<- read.table(text="
> Subject Block Trial Feature1 Feature2
> 1  1  1  48  40
> 1  1  2   62  18
> 1 2  1    34  43
> 1  2  2   51 34
> 1  3  1   64  14
> ",sep="",header=TRUE)
>
>
>  res1<-do.call(rbind,lapply(split(dat1,dat1$Block),function(x)
> data.frame(unique(x[,1:2]),t(colMeans(x[,-c(1:3)])))))
>  res1
> #  Subject Block Feature1 Feature2
> #1       1     1     55.0     29.0
> #2       1     2     42.5     38.5
> #3       1     3     64.0     14.0
>
>
> #With multiple subjects:
> dat2<- read.table(text="
> Subject Block Trial Feature1 Feature2
> 1  1  1  48  40
> 1  1  2   62  18
> 1 2  1    34  43
> 1  2  2   51 34
> 1  3  1   64  14
> 2  1  1   48  35
> 2  1  2   54  15
> 2  2  1   49  50
> 2  2  2   64  40
> 2  3  1   38  28
> ",sep="",header=TRUE)
>
>  
> res2<-do.call(rbind,lapply(split(dat2,list(dat2$Subject,dat2$Block)),function(x)
> data.frame(unique(x[,1:2]),t(colMeans(x[,-c(1:3)])))))
> res2<-do.call(rbind,split(res2,res2$Subject))
> res2
>  # Subject Block Feature1 Feature2
> #1       1     1     55.0     29.0
> #2       1     2     42.5     38.5
> #3       1     3     64.0     14.0
> #4       2     1     51.0     25.0
> #5       2     2     56.5     45.0
> #6       2     3     38.0     28.0
>
>
>
> A.K.
>
>
>
> ----- Original Message -----
> From: Johannes Brand <brandjohan...@gmx.de>
> To: r-help@r-project.org
> Cc:
> Sent: Thursday, February 21, 2013 12:02 PM
> Subject: [R] remove rows in data frame by average
>
> Dear all,
>
> I have a data frame, which looks like this:
>
> Subject | Block | Trial | Feature1 | Feature2 ....
> 1 | 1 | 1 | ... | ...
> 1 | 1 | 2 | ... | ...
> 1 | 2 | 1 | ... | ...
> 1 | 2 | 2 | ... | ...
> 1 | 3 | 1 | ... | ...
> ...| ...| ...| ... | ...
>
> Can I remove the "Trial" column by averaging all the rows and without using
> a "for loop"?
>
> At the end my data frame should look like this:
>
> Subject | Block | Feature1 | Feature2 ....
> 1 | 1 | ... | ...
> 1 | 2 | ... | ...
> 1 | 3 | ... | ...
> ...| ...| ... | ...
>
> Thank you a lot for your help.
>
> Best,
> Johannes
>
>     [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
>
> ______________________________________________
> R-help@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to