2015-11-17 53 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