[R] different interface to by (tapply)?

ivo welch ivo.welch at gmail.com
Mon Aug 30 16:39:13 CEST 2010


serious?

 key <- c(1,1,1,2,2,2)
 val1 <- rnorm(6)
 indf <- data.frame( key, val1)
 outdf <- by(indf, indf$key, function(x) c(m=mean(x), s=sd(x)) )
 outdf
indf$key: 1
 m.key m.val1  s.key s.val1
1.0000 0.6005 0.0000 1.0191
------------------------------------------------------------------------------------------
indf$key: 2
  m.key  m.val1   s.key  s.val1
 2.0000 -0.8177  0.0000  0.3978

> as.data.frame(by(indf, indf$key, function(x) c(m=mean(x), s=sd(x))))
Error in as.data.frame.default(by(indf, indf$key, function(x) c(m = mean(x),  :
  cannot coerce class '"by"' into a data.frame

/iaw
----
Ivo Welch (ivo.welch at brown.edu, ivo.welch at gmail.com)



On Mon, Aug 30, 2010 at 9:36 AM, Henrique Dallazuanna <wwwhsd at gmail.com> wrote:
> Try this:
>
> as.data.frame(by( indf, indf$charid, function(x) c(m=mean(x), s=sd(x)) ))
>
> On Mon, Aug 30, 2010 at 10:19 AM, ivo welch <ivo.welch at gmail.com> wrote:
>>
>> dear R experts:
>>
>> has someone written a function that returns the results of by() as a
>> data frame?   of course, this can work only if the output of the
>> function that is an argument to by() is a numerical vector.
>> presumably, what is now names(byobject) would become a column in the
>> data frame, and the by object's list elements would become columns.
>> it's a little bit like flattening the by() output object (so that the
>> name of the list item and its contents become the same row), and
>> having the right names for the columns.  I don't know how to do this
>> quickly in the R way.  (Doing it slowly, e.g., with a for loop over
>> the list of vectors, is easy, but would not make a nice function for
>> me to use often.)
>>
>> for example, lets say my by() output is currently
>>
>> by( indf, indf$charid, function(x) c(m=mean(x), s=sd(x)) )
>>
>> $`A`
>> [1] 2 3
>> $`B`
>> [2] 4 5
>>
>> then the revised by() would instead produce
>>
>> charid  m  s
>> A          2  3
>> B          4  5
>>
>> working with data frames is often more intuitive than working with the
>> output of by().  the R wizards are probably chuckling now about how
>> easy this is...
>>
>> regards,
>>
>> /iaw
>>
>> ----
>> Ivo Welch (ivo.welch at brown.edu, ivo.welch at gmail.com)
>>
>> ______________________________________________
>> 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.
>
>
>
> --
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
>



More information about the R-help mailing list