对多列数据执行统计

时间:2013-01-11 05:23:44

标签: r loops statistics multiple-columns

我正在尝试对包含数百到数千列的数据表进行某些统计数据,例如t检验。数据的格式设置为我正在比较的两组值位于同一列

所以,基本上我的第一次尝试是剪切和粘贴,如下所示;

NN <-read.delim("E:/output.txt")
View(NN)
attach(NN)

#output p-values of 100 t-tests 
sink(file="E:/ttest.txt", append=TRUE, split=FALSE)
t.test(Tree1[1:13],Tree1[14:34])$p.value
t.test(Tree2[1:13],Tree2[14:34])$p.value
t.test(Tree3[1:13],Tree3[14:34])$p.value

.... ... ..

随着我的数据增长,这变得越来越不切实际。有没有办法按顺序循环每个列的t检验并将输出保存到文件?

提前致谢。

3 个答案:

答案 0 :(得分:6)

使用匿名函数

lapply会让你到达那里:

> test <- data.frame(a=1:100,b=101:200)
> lapply(test,function(x) t.test(x[1:50],x[51:100])$p.value)
$a
[1] 2.876776e-31

$b
[1] 2.876776e-31

我应该尽我所能进行良好实践,并注意到一次性运行100次t测试充满了类型1错误和其他不良的可能性。 孤立地提取p值也可能是一个非常糟糕的举动。

答案 1 :(得分:2)

不确定这是否是一种明智的方法,或者它是否工作正常但是请使用索引部分mapply进行尝试:

test <- data.frame(a=1:100,b=101:200)

testa <- test[1:50, ]
testb <- test[51:100, ]
t.test2 <- function(x, y) t.test(x, y)[["p.value"]]
mapply(t.test2, testa, testb)

编辑:我使用了thelatemail的数据,因此它具有可比性。他的警告是正确的。

答案 2 :(得分:-3)

感谢所有输入。只是一些澄清;当我一次运行数百个t测试时,他们每次都在比较独立的数据集。因此,例如,第1列(Tree1)中的值,行1:50只会在同一列中与行51:100进行一次比较,并且永远不会再次使用。第2列(Tree2)也是如此,依此类推。类型1错误仍然是一个问题吗?我看待它的方式我基本上只对一个单独的数据集进行t检验。

话虽这么说,我想出了一种方法来实现for循环,结果对应于单独t检测每列时的结果。

for (i in 1:100)

  print (t.test(mydata[1:50, i],mydata[51:100, i])$p.value)

end;

唯一的问题是我的输出总是在它前面有一个[1]。