4

是否有一个优雅的单线(使用任何 R 包)来完成以下任务?

tab <- aggregate(. ~ Species, dat=iris, mean)
total <- data.frame(Species='Overall', t(colMeans(iris[,-5])))
rbind(tab, total)
4

2 回答 2

6

包裹tables

library(tables)
tabular( (Species + 1) ~ All(iris)*(mean),data=iris)
> tabular( (Species + 1) ~ All(iris)*(mean),data=iris)

            Sepal.Length Sepal.Width Petal.Length Petal.Width
 Species    mean         mean        mean         mean       
 setosa     5.006        3.428       1.462        0.246      
 versicolor 5.936        2.770       4.260        1.326      
 virginica  6.588        2.974       5.552        2.026      
 All        5.843        3.057       3.758        1.199  

但我作弊并复制了帮助文件中的示例;)感谢 Duncan Murdoch。

或在sqldf

library(sqldf)

库(sqldf)

sqldf(" 
   select Species, 
       avg(Sepal_Length) `Sepal.Length`,
       avg(Sepal_Width) `Sepal.Width`,
       avg(Petal_Length) `Petal.Length`,
       avg(Petal_Width) `Petal.Width` 
    from iris 
    group by Species 
union all 
    select 'All', 
       avg(Sepal_Length) `Sepal.Length`,
       avg(Sepal_Width) `Sepal.Width`, 
       avg(Petal_Length) `Petal.Length`,
       avg(Petal_Width) `Petal.Width` 
    from iris"
)

可以写得更紧凑一点:

variables <- "avg(Sepal_Length) `Sepal.Length`,
    avg(Sepal_Width) `Sepal.Width`,
    avg(Petal_Length) `Petal.Length`,
    avg(Petal_Width) `Petal.Width`"

fn$sqldf(" select Species, $variables from iris group by Species 
    union all select 'All', $variables from iris")

给予

     Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1     setosa     5.006000    3.428000        1.462    0.246000
2 versicolor     5.936000    2.770000        4.260    1.326000
3  virginica     6.588000    2.974000        5.552    2.026000
4        All     5.843333    3.057333        3.758    1.199333
于 2012-07-13T23:18:13.703 回答
3

reshape2在这里可能有点花哨,分为两个步骤:

library(reshape2)
iris.m <- melt(iris, id.vars = "Species")
dcast(Species ~ variable, data = iris.m, fun.aggregate = mean, margins = "Species")
#-----
     Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1     setosa     5.006000    3.428000        1.462    0.246000
2 versicolor     5.936000    2.770000        4.260    1.326000
3  virginica     6.588000    2.974000        5.552    2.026000
4      (all)     5.843333    3.057333        3.758    1.199333

请参阅 ?dcast 上的 margins 参数的详细信息

于 2012-07-13T21:57:31.003 回答