Counting non NAs in a data frame; getting answer as a vector

r na
Plsvn picture Plsvn · Feb 13, 2011 · Viewed 73.8k times · Source

Say I have the following R data.frame ZZZ:

( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )

## not run
   n  m o
1  1  6 7
2  2 NA 8
3 NA NA 8

I want to know, in the form of a vector, how many non-NAs I've got. I want the answer available to me as:

2, 1, 3

When I use the command length(ZZZ), I get 3, which of course is the number of vectors in the data.frame, a valuable enough piece of information.

I have other functions that operate on this data.frame and give me answers in the form of vectors, but, dang-it, length doesn't operate like that.

Answer

hadley picture hadley · Feb 13, 2011
colSums(!is.na(x))

Vectorisation ftw.