在R中编写复杂表格的好方法?

时间:2009-09-23 18:28:44

标签: r statistics data-visualization

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

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

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

我想避免一大堆rbind和hbind声明。

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

有很多方法可以做到这一点。见this related question

您可以使用Hadley Wickham的reshape包(请参阅reshape homepage)。例如,如果您希望将均值,求和和计数函数应用于按值分组的某些数据(这没有意义,但它使用来自重塑的空气质量数据):

> 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's brew package等报告包。有great post on the learnr blog about creating repetitive reports显示如何使用它。

答案 1 :(得分: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)))
})

答案 2 :(得分:0)

Here is an interesting blog posting on this topic.作者试图创建一个类似于联合国世界人口前景:2008年修订报告的报告。

希望有所帮助, 查理