水平数据框中一式三份的 t 检验
t-test of triplicates in a horizontal data frame
我正在尝试创建一个循环,因此我可以测试多个条件:cond_A、cond_B 和 cond_C,每个条件都针对相同的控件 ('ctrl') .每个条件和控制由一式三份表示。结果我想获得一个包含条件名称和 pvalues 的数据框。
这是我的输入:
structure(list(ctrl_1 = 1L, ctrl_2 = 2L, ctrl_3 = 3L, cond_A_1 = 4L,
cond_A_2 = 4L, cond_A_3 = 4L, cond_B_1 = 5L, cond_B_2 = 5L,
cond_B_3 = 7L, cond_C_1 = 8L, cond_C_2 = 9L, cond_C_3 = 2L), .Names = c("ctrl_1",
"ctrl_2", "ctrl_3", "cond_A_1", "cond_A_2", "cond_A_3", "cond_B_1",
"cond_B_2", "cond_B_3", "cond_C_1", "cond_C_2", "cond_C_3"), class = "data.frame", row.names = c(NA,
-1L))
以及具有假设 p 值的预期输出:
cond_A_pval cond_B_pval cond_C_pval
0.05 0.9 0.006
这是我的起点:
pval<-apply(df,1,function(x) {t.test(x[1:3],x[4:6])$p.value})
尝试以下操作:
df <- structure(list(ctrl_1 = 1L, ctrl_2 = 2L, ctrl_3 = 3L, cond_A_1 = 4L,
cond_A_2 = 4L, cond_A_3 = 4L, cond_B_1 = 5L, cond_B_2 = 5L,
cond_B_3 = 7L, cond_C_1 = 8L, cond_C_2 = 9L, cond_C_3 = 2L),
.Names = c("ctrl_1", "ctrl_2", "ctrl_3",
"cond_A_1", "cond_A_2", "cond_A_3",
"cond_B_1", "cond_B_2", "cond_B_3",
"cond_C_1", "cond_C_2", "cond_C_3"),
class = "data.frame", row.names = c(NA, -1L))
library(tidyr)
# Reshape the data into key-value pairs.
# It is generally advisable to have data in tidy format.
df <- gather(df)
# Remove the _1, _2, etc.
df$group <- gsub("_\d", "", df$key)
#Now you can loop through the groups. Note that "ctrl" is the first group:
sapply(unique(df$group)[-1], function(x){
t.test(df[df$group == "ctrl", "value"], df[df$group == x, "value"])$p.value
})
cond_A cond_B cond_C
0.07417990 0.01477836 0.17957429
另见
我正在尝试创建一个循环,因此我可以测试多个条件:cond_A、cond_B 和 cond_C,每个条件都针对相同的控件 ('ctrl') .每个条件和控制由一式三份表示。结果我想获得一个包含条件名称和 pvalues 的数据框。
这是我的输入:
structure(list(ctrl_1 = 1L, ctrl_2 = 2L, ctrl_3 = 3L, cond_A_1 = 4L,
cond_A_2 = 4L, cond_A_3 = 4L, cond_B_1 = 5L, cond_B_2 = 5L,
cond_B_3 = 7L, cond_C_1 = 8L, cond_C_2 = 9L, cond_C_3 = 2L), .Names = c("ctrl_1",
"ctrl_2", "ctrl_3", "cond_A_1", "cond_A_2", "cond_A_3", "cond_B_1",
"cond_B_2", "cond_B_3", "cond_C_1", "cond_C_2", "cond_C_3"), class = "data.frame", row.names = c(NA,
-1L))
以及具有假设 p 值的预期输出:
cond_A_pval cond_B_pval cond_C_pval
0.05 0.9 0.006
这是我的起点:
pval<-apply(df,1,function(x) {t.test(x[1:3],x[4:6])$p.value})
尝试以下操作:
df <- structure(list(ctrl_1 = 1L, ctrl_2 = 2L, ctrl_3 = 3L, cond_A_1 = 4L,
cond_A_2 = 4L, cond_A_3 = 4L, cond_B_1 = 5L, cond_B_2 = 5L,
cond_B_3 = 7L, cond_C_1 = 8L, cond_C_2 = 9L, cond_C_3 = 2L),
.Names = c("ctrl_1", "ctrl_2", "ctrl_3",
"cond_A_1", "cond_A_2", "cond_A_3",
"cond_B_1", "cond_B_2", "cond_B_3",
"cond_C_1", "cond_C_2", "cond_C_3"),
class = "data.frame", row.names = c(NA, -1L))
library(tidyr)
# Reshape the data into key-value pairs.
# It is generally advisable to have data in tidy format.
df <- gather(df)
# Remove the _1, _2, etc.
df$group <- gsub("_\d", "", df$key)
#Now you can loop through the groups. Note that "ctrl" is the first group:
sapply(unique(df$group)[-1], function(x){
t.test(df[df$group == "ctrl", "value"], df[df$group == x, "value"])$p.value
})
cond_A cond_B cond_C
0.07417990 0.01477836 0.17957429
另见