A: aggregate() を使用し、na で行を削除しない方法
R のAggregate()関数を使用して、データ フレーム内の変数の要約統計量を計算できます。
デフォルトでは、 Aggregate()関数は、データ フレーム内で 1 つ以上の NA 値を持つ行を検出した場合、計算の実行時にその行を単純に削除します。
これにより、計算の実行時に予期しない結果が生じる可能性があります。
この動作を回避するには、 Aggregate()関数でna.action=NULL引数を使用します。
次の例は、この引数を実際に使用する方法を示しています。
例: R で aggegate() を使用し、NA の行は削除しないでください。
R に、さまざまなチームのバスケットボール選手のポイントとアシストを示す次のデータ フレームがあるとします。
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'), points=c(5, 9, 12, 14, 14, 13, 10, 6, 15, 18), assists=c(NA, 4, 4, 5, 3, 6, 8, 4, 10, NA)) #view data frame df team points assists 1 to 5 NA 2 to 9 4 3 to 12 4 4 to 14 5 5 A 14 3 6 B 13 6 7 B 10 8 8 B 6 4 9 C 15 10 10 C 18 NA
次に、 Aggregate()関数を使用して、チームごとにグループ化されたポイントとアシストの合計を計算しようとするとします。
#attempt to calculate sum of points and assists, grouped by team aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE ) team points assists 1 A 49 16 2 B 29 18 3 C 15 10
結果はチームごとのポイントとアシストの合計を示しているように見えますが、NA 値を含む行はこれらの計算を実行するときに実際には削除されました。
これは、元のデータ フレームを見て、チーム C のポイント列に 2 つの値があることを確認することで確認できます。
- 15
- 18
したがって、チーム C は合計 33 ポイントを獲得する必要がありますが、結果には 15 ポイントしか表示されません。
これは、ポイント値が 18 の行のアシスト列の値が NA であるためです。これは、チームのポイント合計とチームのポイントの合計を計算するときに、この行が実際には使用されなかったことを意味します。
計算の実行時に NA 値を持つ行が削除されないようにするには、次のようにna.action=NULL引数を使用する必要があります。
#calculate sum of points and assists, grouped by team (don't drop NA rows) aggregate(. ~ team, data=df, FUN=sum, na. rm = TRUE , na. action =NULL) team points assists 1 A 54 16 2 B 29 18 3 C 33 10
今回は、 Aggregate()関数がチーム C のポイント値の合計 33 を正しく返すことに注意してください。
注: na.rm=TRUE引数は、特定の列で計算を実行するときに NA 値を無視する必要があることを指定します。
追加リソース
次のチュートリアルでは、R で他の一般的なタスクを実行する方法について説明します。