运行 使用 tabyl 的多个交叉表
Run multiple crosstabs using tabyl
我有这样的数据:
dat <- mtcars %>% mutate(cyl2 = cyl*2,cyl3 = cyl*3)
我想运行以下每个交叉表 [vs,cyl] [vs,cyl1] [vs,cyl2] [vs,cyl3] 使用 tabyl:
我知道我可以 运行 vs, cyl 这样,并为每个 'cyl' 变量重复此操作。但是我想形成某种循环而不是重复这个。
dat%>%
tabyl(vs,cyl)%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
所以我做了一个函数:
run_xtable <- function(data,v1) {
out <- data%>%
tabyl(vs,v1)%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
return(out)
}
run_xtable(dat,'cyl')
我 运行 遇到了一些问题,非常感谢任何帮助!!
该函数不接受 v1 作为参考变量。为什么是这样?我试着用 enquo 包装它,但没有任何区别。
错误:必须按在 .data
中找到的变量分组。* 未找到列 v1
。
我该如何设置才能使用类似这样的东西来减少重复:
sapply(run_xtable, c('cyl','cyl1','cyl2'))
谢谢!
我们可以将 v1 的输入字符串转换为 sym
bol 并计算 (!!
)
run_xtable <- function(data,v1) {
out <- data%>%
tabyl(vs, !! rlang::sym(v1))%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
return(out)
}
-测试
run_xtable(dat,'cyl')
# vs 4 6 8
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
对于多列,循环遍历列名,即 v1
lapply(c('cyl','cyl2','cyl3'), run_xtable, data = dat)
#[[1]]
# vs 4 6 8
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
#[[2]]
# vs 12 16 8
# 0 16.67% (3) 77.78% (14) 5.56% (1)
# 1 28.57% (4) 0.00% (0) 71.43% (10)
#[[3]]
# vs 12 18 24
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
或者如果我们想要以列作为标识符的单个数据输出
library(purrr)
library(dplyr)
imap_dfr(lst('cyl','cyl2','cyl3'), ~ run_xtable(data = dat, v1 = .x) %>%
mutate(grp = .y, .before = 1))
我有这样的数据:
dat <- mtcars %>% mutate(cyl2 = cyl*2,cyl3 = cyl*3)
我想运行以下每个交叉表 [vs,cyl] [vs,cyl1] [vs,cyl2] [vs,cyl3] 使用 tabyl:
我知道我可以 运行 vs, cyl 这样,并为每个 'cyl' 变量重复此操作。但是我想形成某种循环而不是重复这个。
dat%>%
tabyl(vs,cyl)%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
所以我做了一个函数:
run_xtable <- function(data,v1) {
out <- data%>%
tabyl(vs,v1)%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
return(out)
}
run_xtable(dat,'cyl')
我 运行 遇到了一些问题,非常感谢任何帮助!!
该函数不接受 v1 作为参考变量。为什么是这样?我试着用 enquo 包装它,但没有任何区别。
错误:必须按在
.data
中找到的变量分组。* 未找到列v1
。我该如何设置才能使用类似这样的东西来减少重复:
sapply(run_xtable, c('cyl','cyl1','cyl2'))
谢谢!
我们可以将 v1 的输入字符串转换为 sym
bol 并计算 (!!
)
run_xtable <- function(data,v1) {
out <- data%>%
tabyl(vs, !! rlang::sym(v1))%>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 2) %>%
adorn_ns()
return(out)
}
-测试
run_xtable(dat,'cyl')
# vs 4 6 8
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
对于多列,循环遍历列名,即 v1
lapply(c('cyl','cyl2','cyl3'), run_xtable, data = dat)
#[[1]]
# vs 4 6 8
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
#[[2]]
# vs 12 16 8
# 0 16.67% (3) 77.78% (14) 5.56% (1)
# 1 28.57% (4) 0.00% (0) 71.43% (10)
#[[3]]
# vs 12 18 24
# 0 5.56% (1) 16.67% (3) 77.78% (14)
# 1 71.43% (10) 28.57% (4) 0.00% (0)
或者如果我们想要以列作为标识符的单个数据输出
library(purrr)
library(dplyr)
imap_dfr(lst('cyl','cyl2','cyl3'), ~ run_xtable(data = dat, v1 = .x) %>%
mutate(grp = .y, .before = 1))