web-dev-qa-db-ja.com

dplyrパイプのNAの削除

Dplyrパイピングを使用して、サブセットから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
 Hospital State HeartAttackDeath 
 1 ABBEVILLE AREA MEDICAL CENTER SC NA 
 2 ABBEVILLE GENERAL HOSPITAL LA NA 
 3 ABBOTT NORTHWESTERN HOSPITAL MN 12.3 [。 ____。 ____。](dbl)
64
ITCoderWhiz

descna.rmの引数を取るとは思わない...実際にそれを与えたときにエラーがスローされないことに驚いている。 NAsを削除するだけの場合は、na.omit(base)または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()

HeartAttackDeathカラムからNAsのみを削除する場合は、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()
120
Gregor