NA
または欠落データのある列の名前をすべて検索し、これらの列名をベクトルに保存したい。
_# create matrix
a <- c(1,2,3,4,5,NA,7,8,9,10,NA,12,13,14,NA,16,17,18,19,20)
cnames <- c("aa", "bb", "cc", "dd", "ee")
mymatrix <- matrix(a, nrow = 4, ncol = 5, byrow = TRUE)
colnames(mymatrix) <- cnames
mymatrix
# aa bb cc dd ee
# [1,] 1 2 3 4 5
# [2,] NA 7 8 9 10
# [3,] NA 12 13 14 NA
# [4,] 16 17 18 19 20
_
望ましい結果:列_"aa"
_および_"ee"
_。
私の試み:
_bad <- character()
for (j in 1:4){
tmp <- which(colnames(mymatrix[j, ]) %in% c("", "NA"))
bad <- tmp
}
_
ただし、integer(0)
を出力として取得し続けます。どんな助けも大歓迎です。
このような?
colnames(mymatrix)[colSums(is.na(mymatrix)) > 0]
# [1] "aa" "ee"
R 3.1では、より便利で高速なanyNA
関数が導入されました。
colnames(mymatrix)[ apply(mymatrix, 2, anyNA) ]
古い答え:
非常に長い行列の場合、apply
+ any
は短絡し、少し速く動作します。
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"
非数値列を含むデータフレームがある場合、このソリューションはより一般的です(以前の回答に基づいて構築されます)。
R 3.1 +
names(which(sapply(mymatrix, anyNA)))
または
names(which(sapply(mymatrix, function(x) any(is.na(x)))))