R users,
This probably involves a simple incantation of one of the flavors of apply...
that I can't yet figure out. Consider a list of data frames. I'd like to
apply a function (mean) across the list and return a dataframe of the same
dimensions where each cell represents the mean of that cell across all
dataframes.
# set up the list
x <- vector("list",2)
names(x) <- c("one","two")
# add data to the list
for(i in 1:2){
y = i^2
x[[i]] <-
data.frame("a"=c(y,2*y,3*y),"b"=c(y+1,y+2,y+3),"c"=c(2*y+1,2*y+2,2*y+3))
}
#show the list> x
$one
a b c
1 1 2 3
2 2 3 4
3 3 4 5
$two
a b c
1 4 5 9
2 8 6 10
3 12 7 11
#the result should be
a b c
1 2.5 3.5 6
2 5 4.5 7
3 7.5 5.5 8
Can anyone direct me down the right path?
Thanks in advance
Tim Howard
[[alternative HTML version deleted]]
try this:
DF.lis <- list(
one = data.frame(x = c(1,2,3), y = c(1,2,2), z = c(3,1,1)),
two = data.frame(x = c(2,5,2), y = c(2,3,1), z = c(4,1,2))
)
Reduce("+", DF.lis) / length(DF.lis)
I hope it helps.
Best,
Dimitris
On 11/24/2010 8:37 PM, Tim Howard wrote:> R users,
> This probably involves a simple incantation of one of the flavors of
apply... that I can't yet figure out. Consider a list of data frames.
I'd like to apply a function (mean) across the list and return a dataframe
of the same dimensions where each cell represents the mean of that cell across
all dataframes.
>
> # set up the list
> x<- vector("list",2)
> names(x)<- c("one","two")
> # add data to the list
> for(i in 1:2){
> y = i^2
> x[[i]]<-
data.frame("a"=c(y,2*y,3*y),"b"=c(y+1,y+2,y+3),"c"=c(2*y+1,2*y+2,2*y+3))
> }
> #show the list
>> x
> $one
> a b c
> 1 1 2 3
> 2 2 3 4
> 3 3 4 5
>
> $two
> a b c
> 1 4 5 9
> 2 8 6 10
> 3 12 7 11
> #the result should be
> a b c
> 1 2.5 3.5 6
> 2 5 4.5 7
> 3 7.5 5.5 8
>
> Can anyone direct me down the right path?
>
> Thanks in advance
> Tim Howard
>
>
>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at 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.
>
--
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center
Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014
Web: http://www.erasmusmc.nl/biostatistiek/
Hi, Try this, do.call(`+`, x) / length(x) HTH, baptiste On 24 November 2010 20:37, Tim Howard <tghoward at gw.dec.state.ny.us> wrote:> R users, > This probably involves a simple incantation of one of the flavors of apply... that I can't yet figure out. Consider a list of data frames. I'd like to apply a function (mean) across the list and return a dataframe of the same dimensions where each cell represents the mean of that cell across all dataframes. > > # set up the list > x <- vector("list",2) > names(x) <- c("one","two") > # add data to the list > for(i in 1:2){ > ?y = i^2 > ?x[[i]] <- data.frame("a"=c(y,2*y,3*y),"b"=c(y+1,y+2,y+3),"c"=c(2*y+1,2*y+2,2*y+3)) > ?} > #show the list >> x > $one > ?a b c > 1 1 2 3 > 2 2 3 4 > 3 3 4 5 > > $two > ? a b ?c > 1 ?4 5 ?9 > 2 ?8 6 10 > 3 12 7 11 > #the result should be > ?a b c > 1 2.5 3.5 6 > 2 5 4.5 7 > 3 7.5 5.5 8 > > Can anyone direct me down the right path? > > Thanks in advance > Tim Howard > > > > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >
Hi Tim, It may not be possible, but if you can use an array, it is super easy: ## convert to array Sue <- array(unlist(x), dim = c(3, 3, 2)) ## use apply() on first two dimensions (collapse across 3rd) apply(X = Sue, MARGIN = c(1, 2), FUN = mean) Cheers, Josh On Wed, Nov 24, 2010 at 11:37 AM, Tim Howard <tghoward at gw.dec.state.ny.us> wrote:> R users, > This probably involves a simple incantation of one of the flavors of apply... that I can't yet figure out. Consider a list of data frames. I'd like to apply a function (mean) across the list and return a dataframe of the same dimensions where each cell represents the mean of that cell across all dataframes. > > # set up the list > x <- vector("list",2) > names(x) <- c("one","two") > # add data to the list > for(i in 1:2){ > ?y = i^2 > ?x[[i]] <- data.frame("a"=c(y,2*y,3*y),"b"=c(y+1,y+2,y+3),"c"=c(2*y+1,2*y+2,2*y+3)) > ?} > #show the list >> x > $one > ?a b c > 1 1 2 3 > 2 2 3 4 > 3 3 4 5 > > $two > ? a b ?c > 1 ?4 5 ?9 > 2 ?8 6 10 > 3 12 7 11 > #the result should be > ?a b c > 1 2.5 3.5 6 > 2 5 4.5 7 > 3 7.5 5.5 8 > > Can anyone direct me down the right path? > > Thanks in advance > Tim Howard > > > > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Joshua Wiley Ph.D. Student, Health Psychology University of California, Los Angeles http://www.joshuawiley.com/