[英]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.