是否可以从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
我是否需要做一些额外的操作?
答案 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)