Если ваши данные похожи на связанный пост:
df1 <- data.frame(
Z = as.factor(sample(LETTERS[1:5], size = 10000, replace = T)),
X1 = sample(c(1:10,NA), 10000, replace = T),
X2 = sample(c(1:25,NA), 10000, replace = T),
X3 = sample(c(1:5,NA), 10000, replace = T)
)
Вы можете сделать следующее в базе R:
res <- sapply(split(df1[-1], f = df1$Z), function(x) colSums(is.na(x)))
print(res)
# A B C D E
#X1 193 180 199 170 183
#X2 74 68 79 90 87
#X3 350 349 340 336 328
Если вам это абсолютно необходимо, вы можете позвонить t(res)
:
print(t(res))
# X1 X2 X3
#A 193 74 350
#B 180 68 349
#C 199 79 340
#D 170 90 336
#E 183 87 328
Редактировать: Если вы хотите, чтобы сумма всех NA, а не в каждой переменной, работает следующая небольшая модификация вышеупомянутых:
res2 <- sapply(split(df1[-1], f = df1$Z), function(x) sum(is.na(x)))
print(res2)
# A B C D E
#589 588 569 646 598
В качестве альтернативы, colSums(res)
даст вам то же самое. Опять же, t()
, если необходимо, в качестве столбца.