能否仅通过管道运算符在R中运行t.test()?
用管道运算符运行
t.test()的方法 当然可以用管道运算符来运行t.test()啦!其实有几种简单的写法,完全能满足你的需求——不用非得依赖broom(虽然它整理结果确实好用,但纯管道操作单个检验也完全没问题)。
1. 独立样本t检验(对应你的示例数据)
你的示例数据里有分组变量group和数值变量amount,要检验两组amount的差异,用管道的话可以这么写:
library(dplyr) # 先补全可重复的示例数据 set.seed(123) d <- data.frame( group = sample(LETTERS[1:2], size = 10, replace = TRUE), amount = sample(1:20, size = 10, replace = TRUE) ) # 管道+公式形式的t检验 d %>% t.test(amount ~ group, data = .)
这里的.是管道的占位符,代表前面传过来的整个数据框,作为t.test()的data参数,和直接写t.test(amount ~ group, data = d)效果完全一样。
2. 配对样本t检验的管道写法
如果是配对数据,不管是宽格式还是长格式,都能用管道处理:
宽格式数据直接处理
# 构造配对样本数据 paired_d <- data.frame( before = rnorm(10), after = rnorm(10, mean = 1) ) # 管道运行配对t检验 paired_d %>% t.test(.$before, .$after, paired = TRUE)
转长格式后用公式(更tidy的风格)
paired_d %>% tidyr::pivot_longer(cols = everything(), names_to = "time", values_to = "value") %>% t.test(value ~ time, data = ., paired = TRUE)
3. 管道后直接提取检验结果
如果你不需要完整的检验输出,只想拿某个具体结果(比如p值、统计量),还能在管道后面继续处理:
# 提取p值 d %>% t.test(amount ~ group, data = .) %>% `$`(p.value) # 或者用purrr::pluck("p.value")更优雅
之前你看到的很多主题都是关于同一数据集多次检验的场景,那是因为管道常被用来批量处理,但单个t.test()用管道完全可行,写法也很直观~
内容的提问来源于stack exchange,提问作者jmich738
相关产品推荐
相关产品推荐

