有没有人对如何编写R中的复杂表格有任何好的想法?
恐怕我可能对此有点模糊,但我想设置一个脚本来创建一堆复杂的表格,类似于美国的统计摘要。
例如:http://www.census.gov/compendia/statab/tables/09s0015.pdf
我想避免一大堆rbind和hbind声明。
在SAS
,我听说,有一个表创建规范语言;我想知道R
是否有类似的力量?
谢谢!
答案 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年修订报告的报告。
希望有所帮助, 查理