我正在处理一个数据框架,其中包含对调查问题的回答(记录为二分法二进制变量(。我想根据一个人口统计问题的答案对一个调查问题的答案进行分层。出于隐私原因,我想抑制任何答案(从0、1和NA(,其中<5名参与者作出了回应。
我已经使用dplyr编写了适用于交叉表的代码,但我不能将数据抑制步骤作为管道命令的一部分。我在这里包括了我的代码和示例当前和期望的输出表,有人有建议吗?
crosstab.demo <- df %>%
select(c(answer_var, demo_var)) %>%
group_by(answer_var) %>%
count(demo_var) %>%
pivot_wider(names_from = answer_var, values_from = n)
当前输出表,其中NA是由于跳过调查问题。
demo_var | 0 | <1>NA||
---|---|---|---|
demo1 | 76 | 182 | 47 |
demo2 | 378 | >717 | 210 |
demo3 | 3 | >9 | 2 |
demo4 | 4 | 2 | <1>|
NA | 23 | 2913 |
在结束表中,您可以在mutate()
:中使用across()
library(tidyverse)
read.table(header=T, text="
demo_var 0 1 NA
demo1 76 182 47
demo2 378 717 210
demo3 3 9 2
demo4 4 2 1
NA 23 29 13") %>%
mutate(across(-demo_var, ~ifelse(.x<=5, NA, .x)))
#> demo_var X0 X1 NA.
#> 1 demo1 76 182 47
#> 2 demo2 378 717 210
#> 3 demo3 NA 9 NA
#> 4 demo4 NA NA NA
#> 5 <NA> 23 29 13
创建于2022-03-15由reprex包(v2.0.1(
由于我们无法访问df
,因此很难给出最佳答案。对于您未来的问题,请使用dput(df)
提供您的数据集。
因此,这段代码也可能工作,尽管我无法测试它:
crosstab.demo <- df %>%
select(c(answer_var, demo_var)) %>%
group_by(answer_var) %>%
count(demo_var) %>%
mutate(n=ifelse(n<=5, NA, n) %>%
pivot_wider(names_from = answer_var, values_from = n)