如何在循环中进行t学生考试?

时间:2015-07-18 17:52:06

标签: r loops statistics

我是R的新手,我想做的事情非常简单,但我需要帮助。

img

我有一个类似上面的数据库;其中斑点数=蛋白质的“名称”,grupo =组I和II,APF =荧光读数。 我想对每种蛋白质做一个tstudent测试,通过比较第一组和第二组,但是在一个循环中。

在上面的数据库中只有1种蛋白质(147),但我的真实数据库中我有444种蛋白质。

2 个答案:

答案 0 :(得分:1)

您可以使用dplyr和我的broom包在每个组中执行t.test。如果您的数据存储在名为dat的数据框中,您可以执行以下操作:

library(dplyr)
library(broom)

results <- dat %>%
    group_by(Spot.number) %>%
    do(tidy(t.test(APF ~ grupo, .)))

这可以通过t.test(APF ~ grupo, .)定义的每个组执行Spot.number来实现。扫帚的tidy函数然后将其转换为单行数据帧,以便可以重新组合。然后results数据框将包含每个蛋白质一行(Spot.number),其中的列包括estimatestatisticp.value

有关dplyr和扫帚组合的更多信息,请参阅this vignette

答案 1 :(得分:1)

从一些假数据开始:

lapply

您可以使用gel循环浏览Spot.number的子集,按tests <- lapply(split(gel, gel$Spot.number), function(spot) t.test(APF ~ grupo, spot)) 分隔:

tests <- by(gel, gel$Spot.number, function(spot) t.test(APF ~ grupo, spot))

或只是

sapply(tests, "[[", "p.value")

#      147       148       149 
#0.2941609 0.9723856 0.5726007 

然后你可以转到例如仅取p值:

sapply(tests, "[[", "conf.int")
#           147       148        149
# [1,] -0.985218 -1.033815 -0.8748502
# [2,]  2.712395  1.066340  1.4240488

或置信区间

Spot.number

结果向量或矩阵已经有- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests { NSLog(@"PERIPHERAL: peripheralManager:%@ didReceiveWriteRequests:%@", peripheral, requests); NSString * result = [[requests valueForKey:@"description"] componentsJoinedByString:@""]; _label.text = result; } 作为名称,这可能非常有用。