Hello,

If 'by' is giving you trouble, why not 'aggregate'?

agg.df <- aggregate(iris, list(iris$Species), FUN = summary)
str(agg.df)

Hope this helps,

Rui Barradas
Em 10-10-2012 15:02, Alex van der Spek escreveu:
Thank you Petr,

Try this

str(by(iris, iris$Species, summary))

and you will see what is actually returned is a list of 3, each element
containing a character table, not a numeric table. The rownames of these
tables are empty but should contain the names of the summary stats.

I have a workaround now. Modified the summary.data.frame method to output
numeric values and not the character strings. The rownames I set
afterwards in a for loop. Still would like to know how to do this internal
to summary.data.frame though.

Regards,
Alex van der Spek

Hi

-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-bounces@r-
project.org] On Behalf Of Alex van der Spek
Sent: Wednesday, October 10, 2012 2:48 PM
To: r-help@r-project.org
Subject: [R] Summary using by() returns character arrays in a list

I use by() to generate a summary statistics like so:

Lbys <- by(dat[Nidx], dat$LipTest, summary)

where Nidx is an index vector with names picking out the columns in the
data frame dat.

This returns a list of character arrays (see below for str() output)
where the columns are named correctly but the rownames are empty
strings and the values are strings prepended with the summary
statistic's name (e.g.
"Min.", "Median ").
Without knowledge of your data it is difficult to understand what is
wrong.

If I use iris data set as input everything goes as expected
data(iris)
summary(iris)
   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100
  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300
  Median :5.800   Median :3.000   Median :4.350   Median :1.300
  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199
  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800
  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500
        Species
  setosa    :50
  versicolor:50
  virginica :50



by(iris, iris$Species, summary)
iris$Species: setosa
   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width
  Min.   :4.300   Min.   :2.300   Min.   :1.000   Min.   :0.100
  1st Qu.:4.800   1st Qu.:3.200   1st Qu.:1.400   1st Qu.:0.200
  Median :5.000   Median :3.400   Median :1.500   Median :0.200
  Mean   :5.006   Mean   :3.428   Mean   :1.462   Mean   :0.246
  3rd Qu.:5.200   3rd Qu.:3.675   3rd Qu.:1.575   3rd Qu.:0.300
  Max.   :5.800   Max.   :4.400   Max.   :1.900   Max.   :0.600
        Species
  setosa    :50
  versicolor: 0
  virginica : 0


I am reading the code of summary.data.frame() but can't figure out how
I can change the action of that function to return list of numeric
matrices with as rownames the summary statistic's name ("Min.", "Max."
etc) and as values the numeric values of the calculated summary
statistic.
Just what do you not like on such output and how do you want the output
structured?
Maybe you want aggregate, but without simple data it is hard to say.

aggregate(iris[1:2], list(iris$Species), summary)

Regards
Petr

Any help much appreciated!
Regards,
Alex van der Spek


str(Lbys)
List of 2
  $    : 'table' chr [1:6, 1:19] "Min.   :-0.190  " "1st Qu.: 9.297  "
"Median :10.373  " "Mean   :10.100  " ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ : chr [1:6] "" "" "" "" ...
   .. ..$ : chr [1:19] "Cell_3_SOS....GVF." "Cell_3_SOSq..ms.ms."
"Cell_3_Airflow..cfm." "Cell_3_Float..in.." ...
  $ T38: 'table' chr [1:6, 1:19] "Min.   :8.648  " "1st Qu.:8.920  "
"Median :9.018  " "Mean   :9.027  " ...
   ..- attr(*, "dimnames")=List of 2
   .. ..$ : chr [1:6] "" "" "" "" ...
   .. ..$ : chr [1:19] "Cell_3_SOS....GVF." "Cell_3_SOSq..ms.ms."
"Cell_3_Airflow..cfm." "Cell_3_Float..in.." ...
  - attr(*, "dim")= int 2
  - attr(*, "dimnames")=List of 1
   ..$ dat$LipTest: chr [1:2] "" "T38"
  - attr(*, "call")= language by.data.frame(data = dat[Nidx], INDICES =
dat$LipTest, FUN = summary)
  - attr(*, "class")= chr "by"

______________________________________________
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.

______________________________________________
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