library(dplyr)
mtcars %>%
group_by(vs) %>%
do(tt=t.test(mpg~am, data=.)) %>%
mutate(t=tt$statistic, p=tt$p.value)
我已经针对每个人执行了mg.p上的t.test.我试图提取t.test模型的属性并将它们排列在数据框中。我能够提取p值和t值或任何一个长度的属性。
输出:
Source: local data frame [2 x 4]
Groups: <by row>
vs tt t p
1 0 <S3:htest> -2.579484 0.034481482
2 1 <S3:htest> -3.764735 0.004436935
现在,如果我想使用以下代码提取平均组差异:
mtcars %>%
group_by(vs) %>%
do(tt=t.test(mpg~am, data=.)) %>%
mutate(t=tt$statistic, p=tt$p.value, delta=diff(tt$estimate))
甚至当我只想访问0组的平均值时
mutate(t=tt$statistic, p=tt$p.value, delta=tt$estimate[0])
R抛出以下错误:
Error: object 'tt' not found
似乎在不同的环境中对其进行评估,在该环境中,当对其应用表达式或函数时,未定义它。我也尝试使用乐趣但没有成功。 有人可以在这里说清楚吗?
答案 0 :(得分:4)
您还可以使用broom
包,该包用于data.frames内的统计测试:
library(broom)
library(dplyr)
mtcars %>% group_by(vs) %>%
do(tidy(t.test(mpg~am, data = .)))
Source: local data frame [2 x 9]
Groups: vs [2]
vs estimate estimate1 estimate2 statistic p.value parameter
(dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1 0 -4.700000 15.05000 19.75000 -2.579484 0.034481482 7.486364
2 1 -7.628571 20.74286 28.37143 -3.764735 0.004436935 9.017524
Variables not shown: conf.low (dbl), conf.high (dbl)
答案 1 :(得分:3)
我们可以在do
内提取它而不使用任何其他包。
mtcars %>%
group_by(vs) %>%
do({
tt=t.test(mpg~am, data=.)
data.frame(t=tt$statistic, p=tt$p.value,delta=diff(tt$estimate))
})
# vs t p delta
# (dbl) (dbl) (dbl) (dbl)
#1 0 -2.579484 0.034481482 4.700000
#2 1 -3.764735 0.004436935 7.628571