3

有人对如何在 R 中编写复杂的表格有任何好的想法吗?

恐怕我对此可能有点含糊,但我想设置一个脚本来创建一堆复杂性类似于美国统计摘要的表。

例如:http ://www.census.gov/compendia/statab/tables/09s0015.pdf

我想避免一大堆 rbind 和 hbind 语句。

SAS,我听说,有一种建表规范语言;我想知道是否有类似的力量R

谢谢!

4

3 回答 3

3

看起来您想对某些数据应用许多不同的计算,并按一个字段(在示例中按状态)对其进行分组?

有很多方法可以做到这一点。请参阅此相关问题

您可以使用 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 包学习者博客上有一篇很棒的文章,介绍如何创建重复报告来展示如何使用它。

于 2009-09-23T19:10:52.103 回答
1

另一个选择是 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)))
})
于 2009-09-23T22:52:55.063 回答
0

这是有关此主题的有趣博客文章。作者试图创建一份类似于联合国世界人口展望:2008 年修订报告的报告。

希望有帮助,查理

于 2009-10-01T18:49:10.260 回答