2010-09-15 99 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