2012-12-09 32 views
5

我有一個數據框,其中包含兩個級別的一個因子列和許多數字列。我想通過factor列分割數據框,並對colunm對進行t檢驗。對數據框中的許多列應用t檢驗按因子分解

使用示例數據集嘌呤黴素我想要的結果看起來是這樣的:

Variable Treated Untreated p-value Test-statistic CI of difference**** 
Conc  0.3450 0.2763   XXX  T   XX - XX 
Rate  141.58 110.7272  xxx  T   XX - XX 

我想我使用PLYR尋找一個解決方案,可以輸出在一個不錯的數據框上面的結果。

(嘌呤黴素只包含兩個數值變量,但我期待的解決方案將在數據幀的工作有許多的數值變量)

更新 - 我將試圖澄清我的意思。

我想從數據中去,看起來像這樣:

Grouping variable var1 var2 var3 var4 var5 
1   3 5 7 3 7 
1   3 7 5 9 6 
1   5 2 6 7 6 
1   9 5 7 0 8 
1   2 4 5 7 8 
1   2 3 1 6 4 
2   4 2 7 6 5 
2   0 8 3 7 5 
2   1 2 3 5 9 
2   1 5 3 8 0 
2   2 6 9 0 7 
2   3 6 7 8 8 
2   10 6 3 8 0 

一個結果數據框看起來像這樣:

"Mean in group 1" "Mean in group 2" "P-value of difference" "N" 

var1   ##   ##   ##   ##  
var2   ##   ##   ##   ## 
var3   ##   ##   ##   ## 
var4   ##   ##   ##   ## 
var5   ##   ##   ##   ## 

也許這是一些與mapply我要找因爲我想通過兩級因子將數據幀拆分爲dataframe1和dataframe2,並將函數(t-test)應用於dataframe1和dataframe2的第一部分,然後對dataframe1的第二部分應用t檢驗, dataframe2,然後進行t檢驗在由分解因子生成的所有列對上的dataframe1和dataframe2的部分等等。

+0

謝謝你的編輯幫助。 –

+1

你用plyr嘗試過什麼? – agstudy

+0

我不記得我在plyr上試過的東西,只能說它不能工作。我已經閱讀了J Stat軟件的plyr文章,但是使用的例子太複雜了,我不能理解它。 –

回答

6

也許這會產生你正在尋找的結果是:

df <- read.table(text="Group var1 var2 var3 var4 var5 
1   3 5 7 3 7 
1   3 7 5 9 6 
1   5 2 6 7 6 
1   9 5 7 0 8 
1   2 4 5 7 8 
1   2 3 1 6 4 
2   4 2 7 6 5 
2   0 8 3 7 5 
2   1 2 3 5 9 
2   1 5 3 8 0 
2   2 6 9 0 7 
2   3 6 7 8 8 
2   10 6 3 8 0", header = TRUE) 


t(sapply(df[-1], function(x) 
    unlist(t.test(x~df$Group)[c("estimate","p.value","statistic","conf.int")]))) 

結果:

 estimate.mean in group 1 estimate.mean in group 2 p.value statistic.t conf.int1 conf.int2 
var1     4.000000     3.000000 0.5635410 0.5955919 -2.696975 4.696975 
var2     4.333333     5.000000 0.5592911 -0.6022411 -3.104788 1.771454 
var3     5.166667     5.000000 0.9028444 0.1249164 -2.770103 3.103436 
var4     5.333333     6.000000 0.7067827 -0.3869530 -4.497927 3.164593 
var5     6.500000     4.857143 0.3053172 1.0925986 -1.803808 5.089522 
+0

正是我需要的,謝謝! –

4

也許你能找到這個有用

res <- sapply(split(Puromycin[,-3], Puromycin$state), t.test)[c(1:3,5),] 
conf.level <- sapply(sapply(split(Puromycin[,-3], Puromycin$state), t.test)[4, ], '[', 1:2) 
res <- rbind(res, conf.level.lower=conf.level[1,], conf.level.upper=conf.level[2,]) 
res 
       treated untreated 
statistic  4.297025 4.206221  
parameter  23   21   
p.value   0.00026856 0.0003968191 
estimate   70.96417 55.50182  
conf.level.lower 36.80086 28.06095  
conf.level.upper 105.1275 82.94268  
+1

謝謝,但我需要輸出像在我給的例子。這是因爲我需要在很多數值變量上做這件事,而且我需要將它們按行呈現。 –