2

I have the following code

t <- tapply(z[,3],z[,1],summary)
# > t
# $AUS
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# -0.92420 -0.57920  0.08132 -0.13320  0.35940  0.39650 
# 
# $NZ
#     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
# -1.80700 -0.98980 -0.98310 -0.57470  0.02292  0.88330 

I want to have it displayed as

            Min.  1st Qu.   Median     Mean  3rd Qu.     Max.
Aus     -0.92420 -0.57920  0.08132 -0.13320  0.35940  0.39650
NZ      -1.80700 -0.98980 -0.98310 -0.57470  0.02292  0.88330 

How can it be done in R?

Arun
  • 116,683
  • 26
  • 284
  • 387
darkage
  • 857
  • 3
  • 12
  • 22

2 Answers2

5

Try

do.call(rbind, t)

It will rbind all the dataframes from the list t

Btw. specifically to what you are doing, you can also achieve it by simply usin

t(sapply(z[, c(1,3)], summary))
CHP
  • 16,981
  • 4
  • 38
  • 57
2

You should consider using data.table for this type of analysis. Here, I created z as a two column data frame with columns Country and GDP:

library(data.table)
data.table(z)[, as.list(summary(GDP)), by="Country"]

produces

   Country     Min. 1st Qu. Median   Mean 3rd Qu.   Max.
1:     AUS 0.005469  0.1822 0.4193 0.4182  0.6032 0.9437
2:      NZ 0.034400  0.3248 0.4838 0.5269  0.7648 0.9968

data.table treats list return values as containing columns.

BrodieG
  • 51,669
  • 9
  • 93
  • 146