2014-11-23 99 views
0

我有以下數據:多功能輸出需要

set.seed(10) 
len =100 
vnum=rnorm(len) 
vint=sample(1:10,len,replace=TRUE) 
vbin=sample(letters[1:2],len,replace=TRUE) 
dd = data.frame(vnum, vint, vbin) 
head(dd) 
head(dd) 
      vnum vint vbin 
1: 0.01874617 3 a 
2: -0.18425254 6 a 
3: -1.37133055 7 a 
4: -0.59916772 9 b 
5: 0.29454513 2 b 
6: 0.38979430 7 b 

我需要比較vnum通過t.test通過VBIN分組。我還需要按以下方式做同樣的VINT,並得到輸出:需要 輸出:

 mean_a sd_a mean_b sd_b ttest_p.value 
vnum 
vint 

我想:

aggregate(vnum~vbin, dd, function(x) mean(x)) 
    vbin  vnum 
1 a -0.1390285 
2 b -0.1339682 

t(aggregate(vnum~vbin, dd, mean)) 
    [,1]   [,2]   
vbin "a"   "b"   
vnum "-0.1390285" "-0.1339682" 

,但不能得到一個輸出的所有功能。

回答

1

定義自己的函數來產生所需的輸出:

rbind(myt(vbin, vnum, dd), myt(vbin, vint, dd)) 
##  mean_a.mean in group a  sd_a mean_b.mean in group b  sd_b test_p.value 
## [1,]    -0.1390285 0.8427401    -0.1339682 1.042787 0.9788149 
## [2,]    6.4509804 2.8587670    5.7551020 3.003683 0.2385821 
+0

@rnso對不起,有一個小錯字:

myt <- function(x, y, data) { z <- t.test(y ~ x, data) x <- as.character(substitute(x)) y <- as.character(substitute(y)) c(mean_a = z$estimate[1], sd_a = sd(dd[[y]][dd[[x]]=="a"]), mean_b = z$estimate[2], sd_b = sd(dd[[y]][dd[[x]]=="b"]), test_p.value = z$p.value) } 

然後,你可以爲每個需要變量運行它。現在修復。 – Thomas 2014-11-23 17:24:20

+0

它似乎在工作。只有平均列標題可以從「a組中的mean_a.mean」減少到「mean_a」。另外我需要附加真實的數據框,因爲單個列名需要可訪問。還有缺失的值問題,並且na.rm = T需要添加到某處。謝謝你的時間。 – rnso 2014-11-23 17:28:49