有人对如何在 R 中编写复杂的表格有任何好的想法吗?
恐怕我对此可能有点含糊,但我想设置一个脚本来创建一堆复杂性类似于美国统计摘要的表。
例如:http ://www.census.gov/compendia/statab/tables/09s0015.pdf
我想避免一大堆 rbind 和 hbind 语句。
中SAS
,我听说,有一种建表规范语言;我想知道是否有类似的力量R
?
谢谢!
有人对如何在 R 中编写复杂的表格有任何好的想法吗?
恐怕我对此可能有点含糊,但我想设置一个脚本来创建一堆复杂性类似于美国统计摘要的表。
例如:http ://www.census.gov/compendia/statab/tables/09s0015.pdf
我想避免一大堆 rbind 和 hbind 语句。
中SAS
,我听说,有一种建表规范语言;我想知道是否有类似的力量R
?
谢谢!
看起来您想对某些数据应用许多不同的计算,并按一个字段(在示例中按状态)对其进行分组?
有很多方法可以做到这一点。请参阅此相关问题。
您可以使用 Hadley Wickham 的reshape
包(请参阅重塑主页)。例如,如果您希望将平均值、总和和计数函数应用于按值分组的某些数据(这是没有意义的,但它使用来自 reshape 的空气质量数据):
> library(reshape)
> names(airquality) <- tolower(names(airquality))
> # melt the data to just include month and temp
> aqm <- melt(airquality, id="month", measure="temp", na.rm=TRUE)
> # cast by month with the various relevant functions
> cast(aqm, month ~ ., function(x) c(mean(x),sum(x),length(x)))
month X1 X2 X3
1 5 66 2032 31
2 6 79 2373 30
3 7 84 2601 31
4 8 84 2603 31
5 9 77 2307 30
或者您可以使用该by()
功能。索引将代表州的位置。在您的情况下,您可以应用自己的函数来执行多项任务(取决于您的需要),而不是应用一个函数(例如平均值):例如,function(x) { c(mean(x), length(x)) }
. 然后do.call("rbind"
(例如)在输出上运行。
此外,您可能会考虑使用报告包,例如 Sweave(带有 xtable)或Jeffrey Horner 的 brew 包。学习者博客上有一篇很棒的文章,介绍如何创建重复报告来展示如何使用它。
另一个选择是 plyr 包。
library(plyr)
names(airquality) <- tolower(names(airquality))
ddply(airquality, "month", function(x){
with(x, c(meantemp = mean(temp), maxtemp = max(temp), nonsense = max(temp) - min(solar.r)))
})
这是有关此主题的有趣博客文章。作者试图创建一份类似于联合国世界人口展望:2008 年修订报告的报告。
希望有帮助,查理