在 R 中,我有一个数据框 (mydf),如下所示:
重量 | 性别 | var1 | var2 |
---|---|---|---|
100 | M | 1 | 3 |
800 | F | 2 | 8 |
10 | F | 2 | 9 |
150 | F | 4 | 10 |
(但有 100 列(var3、var 4 等)和 2000 行)。
我想计算按性别分组的每个变量(“var”列)的加权频率和描述性统计数据。对于未分组的数据,我使用了summarytools包计算频率和描述性统计数据(freq和descr函数),效果很好。我的代码是:
## generate descriptive stats and specify weight
mydf_descr <- descr(mydf, weights = mydf$weight)
## generate frequency tables and specify weight
mydf_freq <- freq(mydf, weights = mydf$weight)
但是,当我尝试应用分组时,我遇到了错误。我的代码是:
mydf_descr_gender <- mydf %>%
group_by(gender) %>%
descr(., weights = mydf$weight)
但是,我收到错误:
Error in descr(x = as_tibble(var_obj)[gr_inds[[g]], ], stats = stats, :
weights vector must have same length as 'x'
我对 freq 函数也得到了同样的结果。
我也尝试过:
mdf_freq_gen <- mydf %>%
group_by(gender) %>%
summarise_all(~ freq(., weights = weight))
并收到错误
Error in `summarise()`:
ℹ In argument: `var1 = (structure(function (..., .x = ..1, .y = ..2, . = ..1) ...`.
ℹ In group 1: `gender = 1`.
Caused by error in `freq()`:
! weights vector must have same length as 'x'
Run `rlang::last_trace()` to see where the error occurred.
我已经尝试了很多东西,但我似乎无法让它在分组时运行该函数并包含权重(没有权重它也可以正常工作)。我确信我错过了一些明显的东西!
任何帮助/想法将不胜感激!
您可以拆分数据集并将函数应用于每个子集。
library(dplyr)
library(summarytools)
mydf %>%
split(.$gender) %>%
purrr::map(~descr(.x, weights = .x$weight))
使用
group_map
也可以实现同样的效果。
mydf %>%
group_by(gender) %>%
group_map(~descr(.x, weights = .x$weight))