R - 从管道操作员处运行t检验

时间:2018-04-26 06:42:36

标签: r dplyr piping

是否可以从t.test运营商运营piping? 我试图找到答案,但围绕这个主题的大多数问题都是针对同一数据集进行多次测试 我看过一个broom包裹,但看起来好像是阅读结果 我感兴趣的是,是否可以使用piping并在输出上运行t.test()
例如,这是一些示例数据

library(dplyr)
d <- data.frame(
  group = sample(LETTERS[1:2], size = 10, replace = T),
  amount = sample(1:3, size = 10, replace = T)
  )

如果我使用t.test运行base R,我会得到结果:

t.test(d$amount~d$group, var.equal = T)
> d
   group amount
1      A      2
2      A      2
3      B      1
4      B      3
5      A      2
6      B      1
7      B      2
8      A      1
9      B      3
10     A      3

但如果我尝试使用piping,我会收到错误:

d %>% t.test(amount~group, var.equal = T)

Error: is.atomic(x) is not TRUE
In addition: Warning messages:
1: In is.na(y) :
  is.na() applied to non-(list or vector) of type 'language'
2: In mean.default(x) : argument is not numeric or logical: returning NA
3: In var(x) : NAs introduced by coercion
4: In mean.default(y) : argument is not numeric or logical: returning NA

我是否需要做一些额外的操作?

2 个答案:

答案 0 :(得分:10)

我们可以将其作为summarise

放在list
d %>%
  summarise(ttest = list(t.test(amount ~ group, var.equal = TRUE))) 

如果我们只需要提取pvalue,就可以完成

d %>% 
  summarise(pval = t.test(amount ~ group, var.equal = TRUE)$p.value)

或者我们可以将其放在{}内,然后执行t.test

d %>%
     {t.test(.$amount ~ .$group, var.equal = TRUE)}

或者没有大括号,为公式方法指定data

d %>%
     t.test(amount ~ group, data = ., var.equal = TRUE)

编辑:基于@ hpesoj626的评论

答案 1 :(得分:0)

'rstatix' 包完全处理在管道内执行基本统计测试

https://cran.r-project.org/web/packages/rstatix/rstatix.pdf

rstatix 提供了 t.test() 或 cohensD() 等函数的包装器,从而可以将它们与管道运算符一起使用。按照您的要求执行 t-test 只需使用它们的 t.test(), t_test() 包装器即可:

d %>% t_test(amount ~ group, var.equal = T)