dplyr を使用して data.frame 内の完全なケースをフィルターする (ケースごとの削除) 質問する

dplyr を使用して data.frame 内の完全なケースをフィルターする (ケースごとの削除) 質問する

dplyr を使用して、完全なケースの data.frame をフィルター処理することは可能ですか?complete.casesすべての変数のリストを使用すれば、もちろん機能します。ただし、変数が多数ある場合は a) 冗長になり、変数名が不明な場合は b) 不可能になります (例: data.frame を処理する関数内)。

library(dplyr)
df = data.frame(
    x1 = c(1,2,3,NA),
    x2 = c(1,2,NA,5)
)

df %.%
  filter(complete.cases(x1,x2))

ベストアンサー1

これを試して:

df %>% na.omit

またはこれ:

df %>% filter(complete.cases(.))

またはこれ:

library(tidyr)
df %>% drop_na

1 つの変数の欠損に基づいてフィルタリングする場合は、条件を使用します。

df %>% filter(!is.na(x1))

または

df %>% drop_na(x1)

他の回答では、上記のソリューションの方がはるかに遅いことが示されていますが、これは、属性内の省略された行の行インデックスを返すのに対し、上記の他のソリューションでは返さないna.omitという事実とバランスを取る必要があります。na.action

str(df %>% na.omit)
## 'data.frame':   2 obs. of  2 variables:
##  $ x1: num  1 2
##  $ x2: num  1 2
##  - attr(*, "na.action")= 'omit' Named int  3 4
##    ..- attr(*, "names")= chr  "3" "4"

追加したdplyr の最新バージョンとコメントを反映するように更新しました。

追加した最新バージョンの tidyr とコメントを反映するように更新しました。

おすすめ記事