使用 tidyr 循环创建列的交叉表
Loop to create crosstabs of columns using tidyr
我想使用循环在 df 中创建一列与其他所有列的交叉表。我从这段代码开始(替换为 iris df),它适用于两个变量:
iris <- iris
tbl <- iris %>%
tabyl(Species, Sepal.Length, show_missing_levels = FALSE, show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
我的 df 包含约 200 列。我想我会写一个 for 循环来打印一个变量与其他每个变量的交叉表。这是我尝试过的:
cols <- c('Sepal.Length', 'Sepal.Width')
for (c in cols){
tbl <- iris %>%
tabyl(Species, c, show_missing_levels = FALSE, show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
}
这个returnsColumn `c` is not found.
这看起来应该很简单,但我想不通。感谢您的帮助。
将代码中的 c
更改为 !!sym(c)
。我无法解释这种非标准的 tidyverse 评估,但用外行的话来说,您想访问管道(iris)之外的对象(即“c”)。这就是为什么你需要 !!sym.
将列名称作为字符串传递时,您可以使用 .data
代词。
cols <- c('Sepal.Length', 'Sepal.Width')
for (col in cols){
tbl <- iris %>%
tabyl(Species, .data[[col]],show_missing_levels = FALSE,show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
}
我想使用循环在 df 中创建一列与其他所有列的交叉表。我从这段代码开始(替换为 iris df),它适用于两个变量:
iris <- iris
tbl <- iris %>%
tabyl(Species, Sepal.Length, show_missing_levels = FALSE, show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
我的 df 包含约 200 列。我想我会写一个 for 循环来打印一个变量与其他每个变量的交叉表。这是我尝试过的:
cols <- c('Sepal.Length', 'Sepal.Width')
for (c in cols){
tbl <- iris %>%
tabyl(Species, c, show_missing_levels = FALSE, show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
}
这个returnsColumn `c` is not found.
这看起来应该很简单,但我想不通。感谢您的帮助。
将代码中的 c
更改为 !!sym(c)
。我无法解释这种非标准的 tidyverse 评估,但用外行的话来说,您想访问管道(iris)之外的对象(即“c”)。这就是为什么你需要 !!sym.
将列名称作为字符串传递时,您可以使用 .data
代词。
cols <- c('Sepal.Length', 'Sepal.Width')
for (col in cols){
tbl <- iris %>%
tabyl(Species, .data[[col]],show_missing_levels = FALSE,show_na = FALSE) %>%
adorn_percentages("row") %>%
adorn_pct_formatting(digits = 0) %>%
adorn_ns() %>%
adorn_title("combined") %>%
knitr::kable()
print(tbl)
}