У меня есть большой массив данных записей о визитах к врачу. Каждая запись (строки )может содержать до 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, в нескольких столбцах? Спасибо!