【发布时间】:2016-07-20 12:25:57
【问题描述】:
我试图使用complete.cases 包或任何其他包显示每个变量ID 没有 有多少完整观察。
如果我使用na.omit 过滤掉 NA 值,我将丢失所有可能包含零个完整案例的 ID。
最后,我想要一个包含两列的频率表:ID 和 Number of Complete Observations
> length(unique(data$ID))
[1] 332
> head(data)
ID value
1 1 NA
2 1 NA
3 1 NA
4 1 NA
5 1 NA
6 1 NA
> dim(data)
[1] 772087 2
当我尝试创建自己的函数 z - 计算非 NA 值并将其应用于 aggregate() 函数时,完整观察值为零的 ID 将被忽略。我应该留下 332 行,而不是 323 行。如何使用基本函数解决这个问题?
z <- function(x){
sum(!is.na(x))
}
aggregate(value ~ ID, data = data , FUN = "z")
> nrow(aggregate(isna ~ ID, data = data , FUN = "z"))
[1] 323
【问题讨论】:
-
你能 dput() 你的数据吗?
-
不是一个好的解决方案,但您可以将所有 NA 值设置为等于
value变量中不存在的数字(例如 0 或 9999999)。计算行中没有该数字的观察数。然后将所有这些数字设置回 NA。 -
complete.cases是一个函数而不是一个包 -
参见
aggregate的“na.action”参数——“na.action = NULL”。或者,对于这种情况,您可以使用table像table(!is.na(data$value), data$ID)