如何针对 R 中的一个指定控制组循环测试?
How to loop a test against one designated control group in R?
我对编程和 R 完全陌生,但我有一个数据集,只能使用更强大的统计程序(例如 R)进行分析。
我有一个大而简单的数据集,由数千个不同的组和多个样本组成,我想通过 mann whitney U 检验将其与对照组进行比较,数据结构如下图所示。
Group, Measurements
a 0.14534
cont 0.42574
d 0.36347
c 0.14284
a 0.23593
d 0.36347
cont 0.33514
cont 0.29210
b 0.36345
...
问题出在测试的性质要求只能指定两组。但是,因为我有超过 1 个组,所以它不起作用。
这是我目前所拥有的,如您所见,它不能以重复的方式工作,只有当我的输入文件中有两个组时才有效。
data1 = read.csv(file.choose(), header=TRUE, stringsAsFactors=FALSE)
attach(data1)
testoutput <- wilcox.test(group ~ measurement, mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE)
write.table(testoutput$p.value, file="mwUtest.tsv", sep="\t")
我如何正确编写和循环测试,以便它针对我指定的控制组测试我的所有组?我假设在 wilcox.test 之前使用了 sapply 或 lapply 函数,但我不知道如何使用。
如果之前有人提出过这个简单的问题,我很抱歉,但我找不到关于这个具体问题的任何以前的问题。
在 R 中,对于同一个问题通常有多种解决方案。这是我解决这个问题的方法。
首先,我会拆分我的数据,一个数据框带有实验,一个数据框带有控件:
experiments <- dat[dat$group!="cont",]
controls <- dat[dat$group=="cont",]
然后我会按组拆分我的实验数据,并将其与我的控制测量一起提供给我的测试。请注意,这种构造使得从测试中提取更多值变得容易:只需 return 一个(命名的)向量。
result <- lapply(split(experiments, experiments$group),function(x){
mytest = wilcox.test(x$measurement,controls$measurement,mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE)
return(mytest$p.value)
})
然后合并到 table 很容易:
output <- do.call(rbind,result)
使用的数据:
set.seed(123)
nobs=100
dat <- data.frame(group=sample(c(LETTERS[1:6],"cont"),nobs,T),
measurement=runif(nobs),stringsAsFactors=F)
我对编程和 R 完全陌生,但我有一个数据集,只能使用更强大的统计程序(例如 R)进行分析。
我有一个大而简单的数据集,由数千个不同的组和多个样本组成,我想通过 mann whitney U 检验将其与对照组进行比较,数据结构如下图所示。
Group, Measurements
a 0.14534
cont 0.42574
d 0.36347
c 0.14284
a 0.23593
d 0.36347
cont 0.33514
cont 0.29210
b 0.36345
...
问题出在测试的性质要求只能指定两组。但是,因为我有超过 1 个组,所以它不起作用。
这是我目前所拥有的,如您所见,它不能以重复的方式工作,只有当我的输入文件中有两个组时才有效。
data1 = read.csv(file.choose(), header=TRUE, stringsAsFactors=FALSE)
attach(data1)
testoutput <- wilcox.test(group ~ measurement, mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE)
write.table(testoutput$p.value, file="mwUtest.tsv", sep="\t")
我如何正确编写和循环测试,以便它针对我指定的控制组测试我的所有组?我假设在 wilcox.test 之前使用了 sapply 或 lapply 函数,但我不知道如何使用。
如果之前有人提出过这个简单的问题,我很抱歉,但我找不到关于这个具体问题的任何以前的问题。
在 R 中,对于同一个问题通常有多种解决方案。这是我解决这个问题的方法。
首先,我会拆分我的数据,一个数据框带有实验,一个数据框带有控件:
experiments <- dat[dat$group!="cont",]
controls <- dat[dat$group=="cont",]
然后我会按组拆分我的实验数据,并将其与我的控制测量一起提供给我的测试。请注意,这种构造使得从测试中提取更多值变得容易:只需 return 一个(命名的)向量。
result <- lapply(split(experiments, experiments$group),function(x){
mytest = wilcox.test(x$measurement,controls$measurement,mu=0, alt="two.sided", conf.int=TRUE, conf.level=0.95, paired=FALSE, exact=FALSE, correct=TRUE)
return(mytest$p.value)
})
然后合并到 table 很容易:
output <- do.call(rbind,result)
使用的数据:
set.seed(123)
nobs=100
dat <- data.frame(group=sample(c(LETTERS[1:6],"cont"),nobs,T),
measurement=runif(nobs),stringsAsFactors=F)