5

我有大量的就诊记录数据框。每条记录(行)最多可以有 11 个诊断代码。我想知道每行有多少个非 NA 诊断代码。

以下是数据示例:

diag1 diag2 diag3 diag4 diag5 diag6 diag7 diag8 diag9 diag10 diag11
786   272   401   782    250  91912  530    NA    NA    NA     NA   
845   530   338   311    NA    NA    NA     NA    NA    NA     NA

所以在这两行中,我想知道第 1 行有 7 个代码,第 2 行有 4 个代码。数据框是 31,596 行,因此循环花费的时间太长。我想使用“应用”语句来加快速度:

z = apply(y[,paste("diag", 1:11, sep="")], 1, function(x)sum({any(x[!is.na(x)])}))

R 只返回一个 1 的向量,其长度与数据集中的行数相同。我认为使用“任何”有问题吗?有没有人有一个好方法来计算多列中非 NA 值的数量?谢谢!

4

2 回答 2

9

只需使用is.narowSums

z <- rowSums(!is.na(y[,paste("diag", 1:11, sep="")]))
于 2012-05-07T17:14:50.463 回答
3

您还可以使用:

apply(y, 1, function(x) length(na.omit(x)))

但约书亚乌尔里希的回答要快得多。

于 2012-05-07T17:42:33.547 回答