【发布时间】:2023-04-01 12:16:01
【问题描述】:
我有一个数据集,我需要在其中计算对一系列问题回答“是”的受访者百分比,忽略未回答问题的受访者。每个问题由两个子问题组成 - 受访者在过去一个月内是否做过某事,以及他们在过去一年内是否做过。
数据集看起来像这样。在此示例中,受访者表示他们在过去一年和上个月是否吃过特定类型的甜点:
df <- read.table(text = "1 yes yes yes yes yes yes
2 no yes unknown unknown no no
3 no no no yes no yes
4 unknown unknown no yes yes yes",
header = F)
colnames(df) <- c("id", "ice cream - past month", "ice cream - past year",
"chocolate - past month", "chocolate - past year",
"cookies - past month", "cookies - past year")
我想创建一个表格,汇总每个问题回答“是”(忽略“未知数”)的受访者百分比,生成一个如下所示的表格。
| Dessert | Past month | Past year |
|---|---|---|
| Ice Cream | 33.3% | 66.6% |
| Chocolate | 33.3% | 100.0% |
| Cookies | 50.0% | 75.0% |
我创建的解决方法是创建一个小表格,其中包含对每个变量回答“是”的受访者百分比。
该代码的示例如下:
icecream.month <- df %>%
filter(`ice cream - past month` == "yes" | `ice cream - past month` == "no") %>%
tabyl(`ice cream - past month`) %>%
adorn_totals("row") %>%
adorn_pct_formatting(rounding = "half up", digits = 1) %>%
select(-c("n")) %>%
rename("past month" = "percent") %>%
rename("ice cream" = "ice cream - past month") %>%
subset(`ice cream` == "yes")
我基本上会为每个甜点和每个时间段重复此代码。然后使用“bind_rows”和“full_join”参数将所有值合并到一个表中。
如您所见,这非常笨拙。我对循环非常很陌生,但我怀疑有一种方法可以非常简单地使用循环来做到这一点。任何建议都将不胜感激!
谢谢
【问题讨论】: