对于循环t.test,按R中的因子类比较均值

时间:2019-01-11 22:57:41

标签: r for-loop t-test

我想循环很多单边t。检验,比较一组不同农作物的平均农作物收获值。

我的数据的结构如下:


df <- data.frame("crop" = rep(c('Beans', 'Corn', 'Potatoes'), 10),
                 "value" = rnorm(n = 30),
                 "pattern" = rep(c("mono", "inter"), 15),
                 stringsAsFactors = TRUE)

我希望输出结果可提供t.test的结果,按模式比较每种作物的平均收成(即比较单作马铃薯与间作马铃薯的收成),其中间作模式的替代值更高。

帮助!

2 个答案:

答案 0 :(得分:0)

这是一种优雅的“ tidyverse”方法,该方法利用了tidy中的broom函数,该函数允许您将t检验的输出存储为数据帧。

group_by软件包中的dodplyr函数代替了for循环。

library(dplyr)
library(broom)

# Generate example data
  df <- data.frame("crop" = rep(c('Beans', 'Corn', 'Potatoes'), 10),
                   "value" = rnorm(n = 30),
                   "pattern" = rep(c("inter", "mono"), 15),
                   stringsAsFactors = TRUE)

# Group the data by crop, and run a t-test for each subset of data.
# Use the tidy function from the broom package
# to capture the t.test output as a data frame

  df %>% 
    group_by(crop) %>% 
    do(tidy(t.test(formula = value ~ pattern,
                   data = .,
                   alternative = 'greater')))

答案 1 :(得分:0)

考虑bytapply的面向对象包装器,该包装器旨在按因子对数据帧进行子集化,并对子集运行操作:

t_test_list <- by(df, df$crop, function(sub) 
                   t.test(formula = value ~ pattern,
                          data = sub, alternative = 'greater')
                 )