2010-09-15 74 views
3

是否有一种简单的方法可以从Hmisc R库中获取summary.formulamethod="reverse"返回的传统四分位数?我想得到每个连续变量的平均值/标准差+最小值/最大值,但没有成功。可以通过参数fun传递自定义函数调用,但在method="reverse"时它不起作用。更改Hmisc R归档返回的摘要变量摘要()

+3

http://www.mail-archive.com/[email protected]/msg86002.html - 你可以做的一件事是操纵函数摘要本身并创建你自己的包有一个summary2函数:P – Gnark 2010-09-20 14:40:19

+0

一个独立的例子真的会有帮助......特别是对于那些不熟悉'summary.formula'的我们。 – 2010-09-21 10:44:24

+0

@Gnark我不太喜欢重写Frank Harrell的功能,除非我希望从他的LaTeX输出后端中受益。无论如何,它总是一个选项:) – chl 2010-09-22 09:24:54

回答

1

答案是否定的。软件包的作者已经决定(正如他在Gnark所说的那样),最小值,最大值和标准误差是(连续变量)“绝对不是描述性的”

您可以设置prmsd=TRUEprint.summary.formula.reverse以获得均值和标准差,但无法获取最小值或最大值。

> Data <- data.frame(y=sample(1:2,20,TRUE),x=rnorm(20)) 
> print(summary.formula(y ~ x,data=Data,method="reverse"),prmsd=TRUE) 


Descriptive Statistics by y 

+-+---------------------------------------------------------+---------------------------------------------------------+ 
| |1              |2              | 
| |(N=11)             |(N=9)             | 
+-+---------------------------------------------------------+---------------------------------------------------------+ 
|x|-0.5382053/-0.3375862/ 0.3093839 -0.1434995+/- 1.1113628|-0.4464168/-0.1677906/ 0.3007129 0.1234988+/- 0.9666382| 
+-+---------------------------------------------------------+---------------------------------------------------------+ 
+0

看起来我们在同一时间写了我们的回应......事实上,Harrell使用称为'sfn'的内部函数调用'quantile()'函数,所以我认为我们可以通过调用'range()'来取代我们的结果,并覆盖内部函数,否? – chl 2010-09-22 14:29:27

+0

@chl:你可以尝试,但我怀疑这很容易。这个函数(或者你使用的其他函数)可能会期望这三个分位数。 – 2010-09-22 16:05:44

2

是否必须在Hmisc包内?如果你有连续变量的数据框,你可以得到相同的结果用一个简单的使用重塑包:

df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100)) 

f.summary <- function(x) { 
x <- melt(x) 
x <- cast(x, variable ~ ., c(mean, sd, min, max)) 
return(x) 
} 

f.summary(df) 

HTH

+0

谢谢!其实我设法写了类似的东西,但没有“重塑”;你的解决方案看起来比我的要好得多:) – chl 2010-09-22 09:22:15

3

Arf的...我只是看的summary.formula()代码在Hmisc包,我可以确认Mean和SD确实是计算出来的,但在命令行上打印时不显示。所以,当调用print()函数时,我们必须明确地询问它,

library(Hmisc) 
df <- data.frame(g=sample(LETTERS[1:3], 100, rep=TRUE), replicate(3, rnorm(100))) 
s <- summary(g ~ ., method="reverse", data=df) 
latex(s, prmsd=TRUE, digits=2) # replace latex by print to output inline 

这产生如下表:

alt text