我想循环很多单边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的结果,按模式比较每种作物的平均收成(即比较单作马铃薯与间作马铃薯的收成),其中间作模式的替代值更高。
帮助!
答案 0 :(得分:0)
这是一种优雅的“ tidyverse”方法,该方法利用了tidy
中的broom
函数,该函数允许您将t检验的输出存储为数据帧。
group_by
软件包中的do
和dplyr
函数代替了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)
考虑by
,tapply
的面向对象包装器,该包装器旨在按因子对数据帧进行子集化,并对子集运行操作:
t_test_list <- by(df, df$crop, function(sub)
t.test(formula = value ~ pattern,
data = sub, alternative = 'greater')
)