問題

グループごとに欠落している値を数えるために集計関数を使用して異なる回答を得る理由を説明してもらえますか?また、ネイティブR関数を使用してグループごとに欠落している値を数えるより良い方法はありますか?

 DF <- data.frame(YEAR=c(2000,2000,2000,2001,2001,2001,2001,2002,2002,2002), X=c(1,NA,3,NA,NA,NA,7,8,9,10))
DF

aggregate(X ~ YEAR, data=DF, function(x) { sum(is.na(x)) })
with(DF, aggregate(X, list(YEAR), function(x) { sum(is.na(x)) }))

aggregate(X ~ YEAR, data=DF, function(x) { sum(! is.na(x)) })
with(DF, aggregate(X, list(YEAR), function(x) { sum(! is.na(x)) }))
 

  ベストアンサー

?aggregateのヘルプページは、式メソッドに引数na.actionがあり、デフォルトでna.omitに設定されていることを示しています。

na.action:データにNA値が含まれているときに何が起こるべきかを示す関数。デフォルトは、指定された変数の欠損値を無視することです。

その引数をNULLまたはna.passに変更して、おそらく期待している結果を得ます。

 # aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = na.pass)
aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = NULL)
#   YEAR X
# 1 2000 1
# 2 2001 3
# 3 2002 0
 

  同じタグがついた質問を見る

rcountaggregatena