首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在r中循环进行t-学生测试?

如何在r中循环进行t-学生测试?
EN

Stack Overflow用户
提问于 2015-07-18 17:52:05
回答 2查看 232关注 0票数 0

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

我有一个类似于上面的数据库,其中spot number =蛋白质的"name“,grupo =I和II组和APF =荧光读数。我想通过比较I组和II组,但在一个循环中,对每种蛋白质做一次学生测试。

在上面的数据库中,只有一个蛋白质(147),但在我真正的数据库中,我有444个蛋白质。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-18 22:25:13

首先是一些假数据:

代码语言:javascript
运行
复制
set.seed(0)
Spot.number <- rep(147:149, each=10)
grupo <- rep(rep(1:2, each=5), 3)
APF <- rnorm(30)
gel <- data.frame(Spot.number, grupo, APF)

> head(gel)
  Spot.number grupo        APF
1         147     1  2.1780699
2         147     1 -0.2609347
3         147     1 -1.6125236
4         147     1  1.7863384
5         147     1  2.0325473
6         147     2  0.6261739

您可以使用lapply循环gel的子集,并由Spot.number拆分。

代码语言:javascript
运行
复制
tests <- lapply(split(gel, gel$Spot.number), function(spot) t.test(APF ~ grupo, spot))

或者只是

代码语言:javascript
运行
复制
tests <- by(gel, gel$Spot.number, function(spot) t.test(APF ~ grupo, spot))

然后,您可以转到例如,只取p值:

代码语言:javascript
运行
复制
sapply(tests, "[[", "p.value")

#      147       148       149 
#0.2941609 0.9723856 0.5726007 

或置信区间

代码语言:javascript
运行
复制
sapply(tests, "[[", "conf.int")
#           147       148        149
# [1,] -0.985218 -1.033815 -0.8748502
# [2,]  2.712395  1.066340  1.4240488

得到的向量或矩阵已经有了Spot.number作为名称,这是非常有用的。

票数 1
EN

Stack Overflow用户

发布于 2015-07-18 19:43:16

您可以使用t.test和my 扫帚包在每个组中执行一个扫帚。如果您的数据存储在一个名为dat的数据框架中,您可以这样做:

代码语言:javascript
运行
复制
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和broom组合的更多信息,请参见这个小故事

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31493893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档