【发布时间】:2017-03-08 13:07:36
【问题描述】:
我想要一个通用函数来对数据框中的数据执行多个 t.tests,并使用以下示例数据:
dat <- data.frame(ID=c(1:100),
DRUG= rep(c("D1","D2","D2","D3","D3","D3","D5","D1","D4","D2"),10),
ADR=rep(c("A1","A2","A3","A6","A7","A8","A4","A2","A1","A2"),10),
X= sample(1:250, 100, replace=F))
基本上,我想针对 DRUG - ADR 的每个独特组合的 X 值运行两个 t.test。如果我以 D1-A1 为例,我想测试 D1-A1 与 D1-A1 的 X 值以及 D1-A1 与 D1-A1 的 X 值。下面是我对这个例子的语法,但我的问题是如何制作一个通用循环/函数来对 DRUG - ADR 的每个独特组合执行两个测试。
x <- ifelse (dat$DRUG == "D1" & dat$ADR == "A1",dat$X, NA)
x <- x[!is.na(x)]
y <- ifelse (dat$DRUG != "D1" & dat$ADR == "A1",dat$X, NA)
y <- y[!is.na(y)]
z <- ifelse (dat$DRUG == "D1" & dat$ADR != "A1",dat$X, NA)
z <- z[!is.na(z)]
t.test(x,y)
t.test(x,z)
因此,对于第 4 条记录 (D3-A6),语法为:
x <- ifelse (dat$DRUG == "D3" & dat$ADR == "A6",dat$X, NA)
x <- x[!is.na(x)]
y <- ifelse (dat$DRUG != "D3" & dat$ADR == "A6",dat$X, NA)
y <- y[!is.na(y)]
z <- ifelse (dat$DRUG == "D3" & dat$ADR != "A6",dat$X, NA)
z <- z[!is.na(z)]
t.test(x,y)
t.test(x,z)
谁知道通用函数的好主意?
编辑:我的理想结果如下表:
Drug ADR pvalue1 pvalue2
1 D1 A1 pval11 pval21
2 D2 A2 pval12 pval22
3 D.. A.. pval1.. pval2..
【问题讨论】: