我有一个数据集,如下所示:
id samediff factor value
1 S give 3
1 S impact 4
2 S give 2
2 S impact 5
3 D give 1
3 D impact 4
4 D give 3
4 D impact 5
我想执行多个t检验,以比较S(samediff)条件中每个因子的均值与D(samediff)条件中相同因子的均值。
我知道我可以通过以下方式做到这一点:
dfgive<-filter(df, factor == "give")
t.test(value~samediff, dfgive)
dfimpact<-filter(df, factor == "impact")
t.test(value~samediff, dfimpact)
有没有办法在更少的行中执行多个t.test?在实际数据集中,因素多于此处所包含的因素。我希望能够进行所有必要的t.test,而不必像上面显示的那样创建单独的数据框。
最佳答案
我们可以按“因子”分组,将summarise
的输出归入t.test
library(dplyr)
out <- df %>%
group_by(factor) %>%
summarise(ttest = list(t.test(value ~ samediff)))
out
# A tibble: 2 x 2
# factor ttest
# <chr> <list>
#1 give <S3: htest>
#2 impact <S3: htest>
输出存储在
list
列中,可以用list
或$
提取identical(out$ttest[[1]], t.test(value ~ samediff, dfgive))
#[1] TRUE