我想在数据框中执行独立的t.test
eyecolor suncream moles
1 blue x 10
2 blue x 9
3 blue x 6
4 blue y 15
5 blue y 7
6 blue y 3
7 brown x 9
8 brown x 6
9 brown x 4
10 brown y 1
11 brown y 2
12 brown y 1
这意味着1.根据眼睛颜色进行选择,并且2.对于防晒霜x和y中的nr摩尔,测试t.test。 我能用dplyr选择平均值,例如:
df %>% group_by(eyecolor, suncream) %>% summarize(moles.mean = mean(moles))
为了说清楚,我希望得到一个p值,比较每个eycolor的防晒霜x和y
答案 0 :(得分:1)
这可能应该在ANOVA背景下进行处理。此外,如果答案不明确,OP应该花一些时间来消化零假设检验和t检验的基本原理。那就是说,这是一个答案:
results = df %>% group_by(eyecolor) %>% summarize(p = t.test(moles[which(suncream == 'x')],moles[which(suncream=='y')])$p.value)
答案 1 :(得分:0)
不要让dplyr太复杂。它对t.test的公式界面不友好,这在这种特殊情况下非常有用。 HEITZ给出了一个明确的回答。比较没有dplyr的版本不仅更具惯用性,而且更简洁的功能更少嵌套括号:
by(df, df$eyecolor, function(subs) t.test(subs$moles ~ subs$suncream))
或者,如果你真的只想看到p值;
by(df, df$eyecolor, function(subs) t.test(subs$moles ~ subs$suncream)$p.value)