【发布时间】:2018-03-21 18:09:14
【问题描述】:
有些问题与本主题类似(例如here 或here),我知道一种可行的解决方案,但我想要更优雅的回答。
我从事流行病学工作,我有变量 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,我已经编辑了我的问题。