【发布时间】:2017-09-22 20:11:52
【问题描述】:
这是我正在尝试处理的数据框:
m <- matrix(rnorm(108, mean = 5000, sd = 1000), nrow = 36)
colnames(m) <- paste('V', 1:3, sep = '')
df <- data.frame(type = factor(rep(c('T1', 'T2', 'T3', 'T4', 'T5',
'T6', 'T7', 'T8', 'T9'), each = 4)),
treatment = factor(rep(rep(c('C','P', 'N', 'S'), each = 1),
9)),
as.data.frame(m))
我想知道如何在每个“类型”内的行之间执行 t 检验。这是我想要的 T1 类型的 t 检验示例:
t.test(df[1,3:5], df[2, 3:5])
t.test(df[1,3:5], df[3, 3:5])
t.test(df[1,3:5], df[4, 3:5])
t.test(df[1,3:5], df[3, 3:5])
t.test(df[1,3:5], df[4, 3:5])
我试图弄清楚如何遍历所有行并从 t 检验中获取所有 p 值(以及用于识别的类型和处理),而不是手动计算每一行。任何帮助或建议将不胜感激。
【问题讨论】:
-
m的尺寸和 colnames(m) -
抱歉,刚刚修好了。它应该是 3 列。
-
你可以试试
library(data.table); setDT(df)[, {d1 <- .SD[treatment == "C"][rep(1, 3)]; d2 <- .SD[treatment != "C"]; unlist(lapply(seq_len(nrow(d1)), function(i) t.test(d1[i], d2[i])$p.value))}, type, .SDcols = V1:V3]确保对p值做一些调整 -
@akrun 这并没有为您提供每个
type中treatments的所有组合,但仍然是非常好的解决方案。