2015-11-17 79 views
2

我有一個數據框(X),其中有6列,名稱分別爲:mean.x,s.x,n.x,mean.y,s.y,n.y.它們代表來自種羣x和y的平均值,st dev(s)和樣本量(n)。我正在運行一個R包(BSDA),它根據這些統計參數執行t檢驗。問題是,每行我得到1個彙總表,我有640.000行。R將大量彙總表中的變量存儲在新文檔的列中

我想要做的是用640.000總結表中的所有p值和其他參數創建新列。這可能嗎?

用於第一5行中的值是相同的:mean.x(0.444357),SX(0.02575427)中,nx(633744),mean.y(0.4308),SY(0.000628747),NY(390)

這是一個顯示的彙總表的腳本:

library(BSDA) 

tsum.test(mean.x = X$mean.x, 
      s.x = X$s.x, 
      n.x = X$n.x, 
      mean.y = X$mean.y, 
      s.y = X$s.y, 
      n.y = X$n.y, 
      alternative = "less", 
      mu = 0, # null hypothesis that there is no diff between means 
      var.equal = FALSE, 
      conf.level = 0.95) 

非常感謝!

回答

1

這是可能的。看看下面。一種方法是使用apply此:

想象一下,一個非常簡單的data.frame這樣的(所有行是這個簡單的例子相同):

x <- c(7.8, 6.6, 6.5, 7.4, 7.3, 7.0, 6.4, 7.1, 6.7, 7.6, 6.8) 
y <- c(4.5, 5.4, 6.1, 6.1, 5.4, 5.0, 4.1, 5.5) 
X <- data.frame(mean_x = mean(x), s.x = sd(x), n.x = 11, mean_y = mean(y), s.y = sd(y), 
       n.y = 8) 
X <- rbind(X, X, X) 

#> X 
# mean_x  s.x n.x mean_y  s.y n.y 
#1 7.018182 0.4643666 11 5.2625 0.7069805 8 
#2 7.018182 0.4643666 11 5.2625 0.7069805 8 
#3 7.018182 0.4643666 11 5.2625 0.7069805 8 

然後你使用apply上運行您的tsum.test每行並提取您需要的參數。對於這個例子我提取p.valuesdegrees of freedom

以上輸出的自由度和p.values,其中以綁定到data.frame你可以這樣做:

> cbind(X, t(new_cols)) 
    mean_x  s.x n.x mean_y  s.y n.y pvalue.mean_x df.df 
1 7.018182 0.4643666 11 5.2625 0.7069805 8  0.9999669 11.30292 
2 7.018182 0.4643666 11 5.2625 0.7069805 8  0.9999669 11.30292 
3 7.018182 0.4643666 11 5.2625 0.7069805 8  0.9999669 11.30292 
+0

非常感謝@LyzandeR!唯一的問題是我沒有「x」或「y」值,但只是意味着st dev和n,所以如何處理「function(x)」?.對於我的無知,我感到抱歉,我是新來的R – Lucas

+0

你不需要有x或y變量。我只是用這些來創建名爲'X'的data.frame。據我所知,你也有一個data.frame。所以只需要選擇正確的列進入'sapply'中的'function(x)'。我甚至將我的data.frame與您的示例緊密相關。 – LyzandeR

+0

換句話說,我只是使用x和y,以便我可以使用手段,sds和ns。 data.frame X包含了這些東西,所以你可以忽略我的x和y。在控制檯上鍵入'X'(大寫X)來查看我的data.frame。 – LyzandeR