4
是否有一個優雅的單行程(使用任何R包)來完成以下任務?創建總行的表格摘要
tab <- aggregate(. ~ Species, dat=iris, mean)
total <- data.frame(Species='Overall', t(colMeans(iris[,-5])))
rbind(tab, total)
是否有一個優雅的單行程(使用任何R包)來完成以下任務?創建總行的表格摘要
tab <- aggregate(. ~ Species, dat=iris, mean)
total <- data.frame(Species='Overall', t(colMeans(iris[,-5])))
rbind(tab, total)
包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
包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
但我騙了,並作了一個副本的例子幫助文件;)所以稱讚鄧肯默多克。
或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
'fn $'插值非常棒。 – Ryogi 2012-07-14 22:18:06