使用dplyr创建频率表以计算因子级别和缺失值并报告

使用dplyr创建频率表以计算因子级别和缺失值并报告,r,dplyr,tidyverse,R,Dplyr,Tidyverse,有些问题类似于这个主题(或者,作为一个例子),我知道一个可行的解决方案,但我想要一个更优雅的回答 我从事流行病学工作,我有变量1和0(或NA)。例子: 病人有癌症吗? NA或0为否 1为是 假设我的数据集中有几个变量,我只想用“1”来计算变量。这是一个经典的频率表,但dplyr使事情变得比我第一眼想象的更复杂 我的代码正在运行: dataset %>% select(VISimpair, HEARimpai, IntDis, PhyDis, EmBehDis, LearnDis,

有些问题类似于这个主题(或者,作为一个例子),我知道一个可行的解决方案,但我想要一个更优雅的回答

我从事流行病学工作,我有变量1和0(或NA)。例子: 病人有癌症吗? NA或0为否

1为是

假设我的数据集中有几个变量,我只想用“1”来计算变量。这是一个经典的频率表,但dplyr使事情变得比我第一眼想象的更复杂

我的代码正在运行:

dataset %>%
  select(VISimpair, HEARimpai, IntDis, PhyDis, EmBehDis, LearnDis, 
         ComDis, ASD, HealthImpair, DevDelays) %>%  # replace to your needs
  summarise_all(funs(sum(1-is.na(.))))
您可以在此处复制此代码:

library(tidyverse)
dataset <- data.frame(var1 = rep(c(NA,1),100), var2=rep(c(NA,1),100))

dataset %>% select(var1, var2) %>% summarise_all(funs(sum(1-is.na(.))))
库(tidyverse)
数据集%select(var1,var2)%>%summary_all(funs(sum(1-is.na)())
但我真的想选择我想要的所有变量,计算我有多少个0(或NA)和多少个1,并报告它和这个输出


谢谢。

一种快速而肮脏的方法是强制您输入因子:

dataset$var1=as.factor(dataset$var1)
数据集$var2=as.factor(数据集$var2)
摘要(数据集$var1)
摘要(数据集$var2)

Summary告诉您每个因子级别的出现次数。

下面的每个变量的频率表如何

首先,我编辑示例数据,使其也包含0并加载必要的库

library(tidyr)
library(dplyr)
dataset <- data.frame(var1 = rep(c(NA,1,0),100), var2=rep(c(NA,1,0),100))

如果您提供一个最小的、可重复的示例,它会有所帮助。查看
dplyr::count
Hello,@CPak。你可以用我提供的代码重现这个问题:库(tidyverse)数据集%select(var1,var2)%%>%summary_all(funs(sum(1-is.na)()))对不起,你说得对-你能指定你要的是哪种输出吗?当然,@CPak我想要这个输出Varname_1 Varname_2 Varname_I 1 955 19 19 32 27但是我不想通过这个脏方法sum(1-is.na(.))来实现这个输出,但是对于类似sum(filter(all vars==1))的东西@CPak,我已经编辑了我的问题。是的!它工作得很好。只要dplyr是如此平滑,我就可以报告这个输出,而不必使用gather。多谢!
dataset %>%
    select(var1, var2) %>%
    gather(var, val) %>%
    mutate(val = factor(val)) %>%
    group_by(var, val) %>%
    count()

# A tibble: 6 x 3
# Groups:   var, val [6]
  var   val       n
  <chr> <fct> <int>
1 var1  0       100
2 var1  1       100
3 var1  NA      100
4 var2  0       100
5 var2  1       100
6 var2  NA      100