如何在dplyr mutate中的函数或表达式中使用dplyr中的公式调用创建的t.test模型的属性?

时间:2015-12-03 04:38:41

标签: r dplyr

 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

似乎在不同的环境中对其进行评估,在该环境中,当对其应用表达式或函数时,未定义它。我也尝试使用乐趣但没有成功。 有人可以在这里说清楚吗?

2 个答案:

答案 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