2013-06-29 42 views
2

這裏是我的問題的一些樣本數據:計算一個樣本t檢驗數據幀的每一列和彙總結果在表

mydf <- data.frame(A = rnorm(20, 1, 5), 
        B = rnorm(20, 2, 5), 
        C = rnorm(20, 3, 5), 
        D = rnorm(20, 4, 5), 
        E = rnorm(20, 5, 5)) 

現在,我想運行一個樣本t - 在數據幀的每一列上進行測試,以證明它是否與0顯着不同,如t.test(mydf$A),然後將每列的平均值,t值和p值存儲在新的data.frame中。所以結果應該是這個樣子:

 A B C D E 
mean x x x x x 
t  x x x x x 
p  x x x x x 

我肯定能想到的一些繁瑣的方式來做到這一點,想通過mydf循環,計算參數,然後循環通過新data.frame並插入值。
但隨着像plyr這樣的軟件包,不應該有一個更簡潔和優雅的方式來做到這一點?

任何想法,高度讚賞。

+0

[這] (http://stackoverflow.com/questions/13109652/r-output-without-1-how-to-nicely-format)也可能會幫助你,如果你是usi ng'regress'。 – Metrics

回答

3

嘗試是這樣的,然後提取你想要的結果,從結果表:

results <- lapply(mydf, t.test) 
resultsmatrix <- do.call(cbind, results) 
resultsmatrix[c("statistic","estimate","p.value"),] 

爲您提供:

  A   B   C   D   E   
statistic 1.401338 2.762266 5.406704  3.409422 5.024222  
estimate 1.677863 2.936304 5.418812  4.231458 5.577681  
p.value 0.1772363 0.01240057 3.231568e-05 0.002941106 7.531614e-05 
1

一個data.table解決方案:

library(data.table) 
DT <- as.data.table(mydf) 
DT[,lapply(.SD,function(x){ 
     y <- t.test(x) 
     list(p = round(y$p.value,2), 
       h = round(y$conf.int,2), 
       mm = round(y$estimate,2))})] 

      A   B   C   D   E 
1:  0.2  0.42  0.01   0   0 
2: -0.91,3.98 -1.15,2.62 1.19,6.15 2.82,6.33 2.68,6.46 
3:  1.54  0.74  3.67  4.57  4.57 
+1

可能很高興有行名。此外,我試圖格式化您的代碼,但它只需要回車格式正確,所以我沒有擊中6個字符的最小編輯。 – Thomas

+0

@Thomas謝謝。我不在。但是沒有使用data.table的rownames。 – agstudy

+0

與來自@Thomas的解決方案相比,data.table是否存在證明附加代碼合理的概念優勢? – focusitall

相關問題