Find names of columns which contain missing values

R 3.1 introduced an anyNA function, which is more convenient and faster:

colnames(mymatrix)[ apply(mymatrix, 2, anyNA) ]

Old answer:

If it's a very long matrix, apply + any can short circuit and run a bit faster.

apply(is.na(mymatrix), 2, any)
#   aa    bb    cc    dd    ee 
# TRUE FALSE FALSE FALSE  TRUE 
colnames(mymatrix)[apply(is.na(mymatrix), 2, any)]
# [1] "aa" "ee"

Like this?

colnames(mymatrix)[colSums(is.na(mymatrix)) > 0]
# [1] "aa" "ee"

Or as suggested by @thelatemail:

names(which(colSums(is.na(mymatrix)) > 0))
# [1] "aa" "ee"

If you have a data frame with non-numeric columns, this solution is more general (building on previous answers):

R 3.1 +

names(which(sapply(mymatrix, anyNA)))

or

names(which(sapply(mymatrix, function(x) any(is.na(x)))))

Tags:

R

Na