2017-04-09 4 views
0

私はデータフレーム内のすべての列にNAをカウントしてみてください、このエラー:is.na()(リストまたはベクトル)を非に適用されるタイプの「NULL」の

a = c('a', 'b', NA) 
b = c('a', NA, NA) 
c = c(NA, NA, NA) 
data = data.frame(cbind(a, b, c)) 

のようなこれは

の作品
sum(is.na(data$a)) 

しかし、私が使用LOOP

for(i in data[, 1:3]) { 

    k=sum(is.na(data$i)) 
    cat(k, '\n') 
} 

をしようとすると、私は

を取得

どのように修正するのですか?ありがとう

+0

それとも、単に 'colSums(is.na(データ))' –

答えて

1

どのようにインデックスにデータフレーム(データではなくフレーム自体を)ループを使用する方法について

# use 1:3 as index for the columns 
for(i in 1:3) { 
    # instead of data$i; use data[ , i] to 
    # select all rows and the ith colum 
    k=sum(is.na(data[ , i])) 
    cat(k, '\n') 
} 

はあなたではなく、列をループするよりも、同様に適用する機能を探索することができます。

+0

ありがとうを行うことができます!私はsapply(data、function(y)sum(is.na(y)))のような方法を知っていますが、私はLOOP – Edward

1

あなたはこのような無名関数を適用する使用できます。

apply(data, 2, function(x) sum(is.na(x))) 
関連する問題