R ttest使用tidy循环分组变量
R ttest looping over grouping variable using tidy
我见过与此非常相似的问题,但仍然无法解决这个简单的问题。
我想 运行 对分组变量进行配对 t 检验并将结果存储在数据框中。包 broom
中的命令 tidy
执行此操作,但是当我 运行 时,输出下方的代码对于每个时间点都是相同的。我知道我可以使用循环来完成,但我想在这里使用 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
我确定有一个简单的修复方法,但不确定它是什么,任何建议都很好。谢谢
如果要引用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检验每次都是一样的。
我见过与此非常相似的问题,但仍然无法解决这个简单的问题。
我想 运行 对分组变量进行配对 t 检验并将结果存储在数据框中。包 broom
中的命令 tidy
执行此操作,但是当我 运行 时,输出下方的代码对于每个时间点都是相同的。我知道我可以使用循环来完成,但我想在这里使用 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
我确定有一个简单的修复方法,但不确定它是什么,任何建议都很好。谢谢
如果要引用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检验每次都是一样的。