如何在dplyr的mutate函数中使用t.test模型的属性或表达式,该模型是通过dplyr do内部的公式调用创建的?

3
 library(dplyr)
 mtcars %>% 
 group_by(vs) %>% 
 do(tt=t.test(mpg~am, data=.)) %>% 
 mutate(t=tt$statistic, p=tt$p.value)

我已经对mgp进行了关于am的t.test,分别与每个值进行比较。现在我想要提取t.test模型的属性,并将它们排列在数据框中。我能够提取p-value和t-value或任何长度为1的属性。

输出:

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

似乎当对tt应用表达式或函数时,它在不同的环境中被评估,因此未定义。我也尝试使用funs但没有成功。请有经验的人点拨一下?

2个回答

4

您也可以使用broom包,该包是为数据框内的统计测试而设计的:

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)

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接