使用dplyr在多个字段中用NA替换小于值



我正在处理一个数据框架,其中包含对调查问题的回答(记录为二分法二进制变量(。我想根据一个人口统计问题的答案对一个调查问题的答案进行分层。出于隐私原因,我想抑制任何答案(从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是由于跳过调查问题。

<1>NA>><1>29
demo_var0
demo17618247
demo2378717210
demo3392
demo442
NA2313

在结束表中,您可以在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)

最新更新