【问题标题】:To create a frequency table with dplyr to count the factor levels and missing values and report it使用 dplyr 创建频率表以计算因子水平和缺失值并报告
【发布时间】:2018-03-21 18:09:14
【问题描述】:

有些问题与本主题类似(例如herehere),我知道一种可行的解决方案,但我想要更优雅的回答。

我从事流行病学工作,我有变量 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 并报告它并得到这个输出

谢谢。

【问题讨论】:

  • 如果你提供一个最小的、可重现的例子,它会有所帮助。查看dplyr::count
  • 你好,@CPak。您可以使用我提供的代码重现此问题: library(tidyverse) dataset % select(var1, var2) %>% summarise_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,我已经编辑了我的问题。

标签: r dplyr tidyverse


【解决方案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

【讨论】:

  • 是的!它工作得很好。只要 dplyr 如此流畅,我认为可以报告此输出而无需使用收集。非常感谢!
【解决方案2】:

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

dataset$var1 = as.factor(dataset$var1) dataset$var2 = as.factor(dataset$var2) summary(dataset$var1) summary(dataset$var2) 摘要告诉您每个因素水平的出现次数。

【讨论】:

    猜你喜欢
    • 2022-06-28
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 2018-02-13
    • 2015-03-27
    • 2021-10-15
    相关资源
    最近更新 更多