4

我已经看到了与此非常相似的问题,但仍然无法解决这个简单的问题。

我想对分组变量运行配对 t 检验并将结果存储在数据框中。tidy包中的命令broom执行此操作,但是当我运行下面的代码时,每个时间点的输出都是相同的。我知道我可以使用循环来做到这一点,但我想在tidy这里使用并了解正在发生的事情。

这是一个可重现的示例:

library(dplyr)
library(broom)
df <- data.frame (time1=rep(1:4,30),
              sbp=runif(120, 100, 150),
              sbp1=runif(120, 120, 170))

R>head(df)
  time1      sbp     sbp1
1     1 146.9411 151.4842
2     2 102.7216 139.3380
3     3 125.7126 167.1806
4     4 126.0086 146.2177
5     1 149.9213 139.7968
6     2 117.6843 135.2726   



 z<-df %>%
 arrange(time1) %>%
 group_by(time1) %>%
 do(tidy(t.test(df$sbp,df$sbp1,paired=TRUE)))         

每个时间点的结果输出都是相同的:

R>head(z)
Source: local data frame [4 x 7]
Groups: time1 [4]

  time1  estimate statistic      p.value parameter  conf.low conf.high
  (int)     (dbl)     (dbl)        (dbl)     (dbl)     (dbl)     (dbl)
1     1 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
2     2 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
3     3 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779
4     4 -22.48413 -11.69648 1.660608e-21       119 -26.29047 -18.67779

我确信有一个简单的解决方法,但不确定它是什么,任何建议都会很棒。谢谢

4

1 回答 1

6

如果要引用内部使用的数据集dplyr,则需要使用.

z <- df %>%
       arrange(time1) %>%
       group_by(time1) %>%
       do(tidy(t.test(.$sbp, .$sbp1,paired=TRUE)))     
Source: local data frame [4 x 7]
Groups: time1 [4]

  time1  estimate statistic      p.value parameter  conf.low conf.high
  (int)     (dbl)     (dbl)        (dbl)     (dbl)     (dbl)     (dbl)
1     1 -22.45646 -6.339261 6.307292e-07        29 -29.70157 -15.21135
2     2 -19.85310 -4.346528 1.550448e-04        29 -29.19485 -10.51136
3     3 -21.00503 -5.996117 1.609850e-06        29 -28.16968 -13.84037
4     4 -23.56341 -6.037170 1.438441e-06        29 -31.54606 -15.58077

通过指您忽略每次完成df$sbp的分组并使用来完成数据集。dplyr这解释了为什么拟合的 t 检验每次都相同。

于 2016-04-12T11:07:35.883 回答