【发布时间】:2016-03-16 00:46:45
【问题描述】:
我正在使用 dpylr 包来计算每个变量的子组的缺失值。
我用了一个小功能:
NAobs <- function(x) length(x[is.na(x)]) ####function to count missing data for variables
计算缺失值。 因为我有很多变量,并且我想添加更多信息(每组的样本量,以及每组缺失数据的百分比),所以我编写了以下代码,并插入了一个变量(task_1)来检查它。
library(dplyr)
group_by(DataRT, class) %>%
summarise(class_size=length(class), missing = NAobs(task_1), perc.= missing/class_size)
这很好用,我收到这样的表格:
class class_size missing perc.
(dbl) (int) (int) (dbl)
1 1 25 2 0.08000000
2 2 25 1 0.04000000
3 3 25 3 0.12000000
4 4 25 4 0.16000000
5 5 24 3 0.12500000
6 6 29 6 0.20689655
...
在下一步中,我想通过将我的命令包含到一个函数中来概括它:
missing<-function(x, print=TRUE){
group_by(DataRT, class) %>%
summarise(class_size=length(class),
missing = NAobs(x),
perc.= missing/class_size)}
最理想的情况是,我现在可以编写 missing(task_1) 并获得同一张表,但 NAobs(x) 会忽略分组变量(类),我会收到这样的表:
class class_size missing perc.
(dbl) (int) (int) (dbl)
1 1 25 59 2.360000
2 2 25 59 2.360000
3 3 25 59 2.360000
4 4 25 59 2.360000
5 5 24 59 2.458333
6 6 29 59 2.034483
...
所以发生的情况是“缺失”列仅显示 task_1 的 NA 案例总数,而忽略了组;并且用 NAobs(variable name) 替换 NAobs(x) 来解决这个问题会破坏首先编写函数的目的。如何计算每组的缺失案例数,而不必每次都复制代码和更改变量名称?谢谢!
【问题讨论】:
-
您是否假设函数参数
x在您的函数内部的 NAobs 范围内被评估?大概您想将其作为文本传递,然后...我不完全确定。 -
您可以将
NAobs简化为NAobs <- function(x) sum(is.na(x)) -
您需要阅读非标准评估。 Hadley has written some useful things about it. 本质上,
x将被引用,因此您需要使用 SEsummarise_版本,为此您需要对输入进行不同的格式化。
标签: r function dplyr missing-data counting