R中数据框中多个变量的报告频率
Report frequency for multiple variables in a dataframe in R
我有一个包含调查数据的数据框。我想生成一份 table 格式的报告,其中包含每个变量的频率。
所以使用数据集 mtcars,有这个:
> count(mtcars, cyl)
cyl n
1 4 11
2 6 7
3 8 14
> count(mtcars, gear)
gear n
1 3 15
2 4 12
3 5 5
我想制作这样的 table(或类似的东西):
variable
n
cyl
4
11
6
7
8
14
gear
3
15
4
12
5
5
知道如何实现这一点吗?
下面的输出格式略有不同。但是,它确实允许子集(使用 OP 要求不允许的列 variable
。)
library(data.table)
df <- setDT(copy(mtcars))
# select columns as grouping by continuous variables is not appropriate
x <- c('cyl', 'gear')
y <- lapply(x, \(i) df[, .N, i])
names(y) <- x
y <- rbindlist(y, idcol=T, use.names=F)
names(y) <- c('variable', 'class', 'count')
variable class count
1: cyl 6 7
2: cyl 4 11
3: cyl 8 14
4: gear 4 12
5: gear 3 15
6: gear 5 5
我们可以编写一对嵌套函数来映射 count
到多个变量和 row-bind 结果,使用一点整洁的评估:
library(tidyverse)
count_multi <- function(.data, ...) {
count_var <- function(var, .data) {
.data %>%
count(Value = as.character({{ var }})) %>% # coerce to character to
mutate( # allow multiple var types
Variable = as.character(ensym(var)),
.before = everything()
)
}
map_dfr(enquos(...), count_var, .data = .data)
}
mtcars %>%
count_multi(cyl, gear)
输出:
Variable Value n
1 cyl 4 11
2 cyl 6 7
3 cyl 8 14
4 gear 3 15
5 gear 4 12
6 gear 5 5
我相信您可以使用 kableExtra::pack_rows()
为 markdown 中的每个 Variable
创建子标题。
我有一个包含调查数据的数据框。我想生成一份 table 格式的报告,其中包含每个变量的频率。
所以使用数据集 mtcars,有这个:
> count(mtcars, cyl)
cyl n
1 4 11
2 6 7
3 8 14
> count(mtcars, gear)
gear n
1 3 15
2 4 12
3 5 5
我想制作这样的 table(或类似的东西):
variable | n |
---|---|
cyl | |
4 | 11 |
6 | 7 |
8 | 14 |
gear | |
3 | 15 |
4 | 12 |
5 | 5 |
知道如何实现这一点吗?
下面的输出格式略有不同。但是,它确实允许子集(使用 OP 要求不允许的列 variable
。)
library(data.table)
df <- setDT(copy(mtcars))
# select columns as grouping by continuous variables is not appropriate
x <- c('cyl', 'gear')
y <- lapply(x, \(i) df[, .N, i])
names(y) <- x
y <- rbindlist(y, idcol=T, use.names=F)
names(y) <- c('variable', 'class', 'count')
variable class count
1: cyl 6 7
2: cyl 4 11
3: cyl 8 14
4: gear 4 12
5: gear 3 15
6: gear 5 5
我们可以编写一对嵌套函数来映射 count
到多个变量和 row-bind 结果,使用一点整洁的评估:
library(tidyverse)
count_multi <- function(.data, ...) {
count_var <- function(var, .data) {
.data %>%
count(Value = as.character({{ var }})) %>% # coerce to character to
mutate( # allow multiple var types
Variable = as.character(ensym(var)),
.before = everything()
)
}
map_dfr(enquos(...), count_var, .data = .data)
}
mtcars %>%
count_multi(cyl, gear)
输出:
Variable Value n
1 cyl 4 11
2 cyl 6 7
3 cyl 8 14
4 gear 3 15
5 gear 4 12
6 gear 5 5
我相信您可以使用 kableExtra::pack_rows()
为 markdown 中的每个 Variable
创建子标题。