1. ホーム
  2. r

[解決済み] dplyrパイプのNAを削除する [重複].

2023-04-17 03:24:23

質問

私はdplyr pipingを使用してサブセットからNAを削除しようとしました。私の答えは、ステップを逃したことの表れなのでしょうか。dplyrを使った関数の書き方を勉強しているところです。

> outcome.df%>%
+ group_by(Hospital,State)%>%
+ arrange(desc(HeartAttackDeath,na.rm=TRUE))%>%
+ head()
Source: local data frame [6 x 5]
Groups: Hospital, State

                           病院名 状態名 心筋梗塞 死亡者数
1 Abbeville Area Medical Center Sc Na
2 Abbeville General Hospital LA NA
3 アボット・ノースウエスタン病院(ミネソタ州) 12.3
4 アビリーンリージョナルメディカルセンター(テキサス州) 17.2
5 アビントン記念病院(ペンシルバニア州) 14.3
6 アブラハム・リンカーン記念病院(イリノイ州) na
変数は示していない。心不全死(dbl)、肺炎死(dbl)
  (dbl)

どのように解決するのですか?

私は desc を取る na.rm の引数を取ります。実際に、引数を与えてもエラーを投げないことに驚いています。もし、単に NA を削除したいだけなら na.omit (ベース) または tidyr::drop_na :

outcome.df %>%
  na.omit() %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

library(tidyr)
outcome.df %>%
  drop_na() %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

を削除したいだけなら NA のみを削除したい場合は、HeartAttackDeath列から is.na でフィルタリングする、あるいは tidyr::drop_na :

outcome.df %>%
  filter(!is.na(HeartAttackDeath)) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

outcome.df %>%
  drop_na(HeartAttackDeath) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()

ダブりで指摘されているように complete.cases も使えますが、データフレームを引数に取りながらインデックスベクターを返すので、チェーンに入れるには少し厄介です。というわけで、こんな使い方もできます。

outcome.df %>%
  filter(complete.cases(.)) %>%
  group_by(Hospital, State) %>%
  arrange(desc(HeartAttackDeath)) %>%
  head()