繁体   English   中英

用dplyr创建频率表以计算因子水平和缺失值并报告

[英]To create a frequency table with dplyr to count the factor levels and missing values and report it

有些问题与此主题相似( 此处此处为例),我知道一个可行的解决方案,但我希望得到一个更优雅的回答。

我从事流行病学研究,并且具有变量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(.))))

但是我真的很想选择我想要的所有变量,计算我有多少个0(或NA)以及我有多少个1,并报告并得到此输出 期望的输出

谢谢。

每个变量的以下频率表如何?

首先,我将样本数据编辑为也包含0并加载必要的库。

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

其次,我使用转换数据gather ,以使其更容易group_by后来通过创建频率表count ,由CPAK提及。

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

一种快速而肮脏的方法是将您的输入强制化为因素:

dataset$var1 = as.factor(dataset$var1) dataset$var2 = as.factor(dataset$var2) summary(dataset$var1) summary(dataset$var2)摘要可告诉您每个级别的因子的出现次数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM