我有一个数据集,如下所示:

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

10-01 06:30