使用列号而不是列名的 T 检验
T-test with column number instead of column name
我正在尝试使用 RStatix 的 t_test()
执行一系列 T 检验,其中因变量在每个测试中都相同,并且分组变量发生变化。我在一个循环内进行这些测试,所以我想 select 分组变量带有列号而不是列名。我曾尝试使用 colnames(dataframe)[[columnnumber]]
执行此操作,但出现以下错误:“无法提取不存在的列”。我怎样才能 select 使用列号而不是列名的分组变量?
下面是一个带有虚构数据框的最小可复制示例;当指示分组变量的名称(性别)时,测试工作正常,但当指示列号时则不能。
library(tidyverse)
library(rstatix)
dat<-data.frame(gender=rep(c("Male", "Female"), 1000),
age=rep(c("Young","Young", "Old", "Old"),500),
tot= round(runif(2000, min=0, max=1),0))
dat %>% t_test(tot ~ gender,detailed=T) ##Works
dat %>% t_test(tot ~ colnames(dat)[[1]],detailed=T) ##Doesn't work
colnames(dat)[1]
是一个字符串。 t_test
需要公式对象,需要将字符串转为公式传入t_test
。这可以使用 reformulate
或 as.formula
.
来完成
library(rstatix)
dat %>% t_test(reformulate(colnames(dat)[1], 'tot'),detailed=T)
# A tibble: 1 x 15
# estimate estimate1 estimate2 .y. group1 group2 n1 n2 statistic
#* <dbl> <dbl> <dbl> <chr> <chr> <chr> <int> <int> <dbl>
#1 0.011 0.505 0.494 tot Female Male 1000 1000 0.492
# … with 6 more variables: p <dbl>, df <dbl>, conf.low <dbl>,
# conf.high <dbl>, method <chr>, alternative <chr>
如果我们想使用 tidyverse
构造方式,那么在 expr
中执行此操作
library(rstatix)
dat %>%
t_test(formula = eval(rlang::expr(tot ~ !! rlang::sym(names(.)[1]))),
detailed = TRUE)
# A tibble: 1 x 15
# estimate estimate1 estimate2 .y. group1 group2 n1 n2 statistic p df conf.low conf.high method alternative
#* <dbl> <dbl> <dbl> <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#1 -0.02 0.497 0.517 tot Female Male 1000 1000 -0.894 0.371 1998. -0.0639 0.0239 T-test two.sided
注意:值是不同的,因为数据是在没有任何 set.seed
(wrt rnorm
)
的情况下构建的
我正在尝试使用 RStatix 的 t_test()
执行一系列 T 检验,其中因变量在每个测试中都相同,并且分组变量发生变化。我在一个循环内进行这些测试,所以我想 select 分组变量带有列号而不是列名。我曾尝试使用 colnames(dataframe)[[columnnumber]]
执行此操作,但出现以下错误:“无法提取不存在的列”。我怎样才能 select 使用列号而不是列名的分组变量?
下面是一个带有虚构数据框的最小可复制示例;当指示分组变量的名称(性别)时,测试工作正常,但当指示列号时则不能。
library(tidyverse)
library(rstatix)
dat<-data.frame(gender=rep(c("Male", "Female"), 1000),
age=rep(c("Young","Young", "Old", "Old"),500),
tot= round(runif(2000, min=0, max=1),0))
dat %>% t_test(tot ~ gender,detailed=T) ##Works
dat %>% t_test(tot ~ colnames(dat)[[1]],detailed=T) ##Doesn't work
colnames(dat)[1]
是一个字符串。 t_test
需要公式对象,需要将字符串转为公式传入t_test
。这可以使用 reformulate
或 as.formula
.
library(rstatix)
dat %>% t_test(reformulate(colnames(dat)[1], 'tot'),detailed=T)
# A tibble: 1 x 15
# estimate estimate1 estimate2 .y. group1 group2 n1 n2 statistic
#* <dbl> <dbl> <dbl> <chr> <chr> <chr> <int> <int> <dbl>
#1 0.011 0.505 0.494 tot Female Male 1000 1000 0.492
# … with 6 more variables: p <dbl>, df <dbl>, conf.low <dbl>,
# conf.high <dbl>, method <chr>, alternative <chr>
如果我们想使用 tidyverse
构造方式,那么在 expr
library(rstatix)
dat %>%
t_test(formula = eval(rlang::expr(tot ~ !! rlang::sym(names(.)[1]))),
detailed = TRUE)
# A tibble: 1 x 15
# estimate estimate1 estimate2 .y. group1 group2 n1 n2 statistic p df conf.low conf.high method alternative
#* <dbl> <dbl> <dbl> <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
#1 -0.02 0.497 0.517 tot Female Male 1000 1000 -0.894 0.371 1998. -0.0639 0.0239 T-test two.sided
注意:值是不同的,因为数据是在没有任何 set.seed
(wrt rnorm
)