【发布时间】:2022-01-07 21:56:07
【问题描述】:
我有一个带有权重列的调查数据,例如这个虚拟样本:
df <- structure(
list(
device = c(
"Digital",
"No Device",
"No Device",
"Digital",
"Digital",
"No Device",
"Digital",
"Digital",
"Analouge",
"Digital"
),
sex = structure(c(1, 2, 2, 1, 1, 1, 1, 2, 2, 1), format.spss = "F8.2"),
region = structure(c(15, 3, 18, 18, 30, 18, 54, 50, 30,
38), format.spss = "F8.0"),
age_group = structure(c(3, 3,
5, 7, 6, 4, 7, 7, 6, 7), format.spss = "F8.2"),
weight = structure(
c(
845.674012066483,
523.065753702848,
551.805833394951,
454.282517089281,
1234.09384828581,
1046.04985735983,
994.717870661103,
1013.62211131793,
1307.98181670913,
544.360713556522
),
format.spss = "F8.2"
)
),
row.names = c(NA,
-10L),
class = c("tbl_df", "tbl", "data.frame")
)
我正在使用 srvyr 包制作调查对象并进行分析:
library(srvyr)
sv_sample <- df %>%
srvyr::as_survey_design(weights = weight)
例如,我在这里进行设备和性别之间的交叉表交互,没关系
sv_sample %>%
mutate(sex = as.factor(sex) )%>%
mutate_at(vars(device),
fct_explicit_na,
na_level = "to_impute") %>%
group_by(sex ,device) %>%
summarize(
proportion = srvyr::survey_mean(na.rm = TRUE),
total = srvyr::survey_total(na.rm = TRUE)
) %>%
select(-proportion_se, -total_se) %>%
ungroup()
输出:
# A tibble: 5 x 4
sex device proportion total
<fct> <fct> <dbl> <dbl>
1 1 Digital 0.796 4073.
2 1 No Device 0.204 1046.
3 2 Analouge 0.385 1308.
4 2 Digital 0.298 1014.
5 2 No Device 0.316 1075.
我需要在我的数据中为 device 和其他演示变量创建类似的交叉表,例如 age 、 region 、 family_size 等,所以我尝试使用 Curly curly 制作一个函数,而不是多次复制和粘贴交叉表 sn-p操作员。我在这里错过了什么?
crosstab <- function(survey_data, vars1 , vars2) {
mutate(demo = as.factor{{ vars1 }} )%>%
mutate_at(vars{{ vars2 }},
fct_explicit_na,
na_level = "to_impute") %>%
group_by(demo ,{{ vars2 }}) %>%
summarize(
proportion = srvyr::survey_mean(na.rm = TRUE),
total = srvyr::survey_total(na.rm = TRUE) ) %>%
select(-proportion_se, -total_se) %>%
ungroup()
}
crosstab(sv_sample, sex ,device)
【问题讨论】: