1. ホーム
  2. r

[解決済み] dplyrを用いたdata.frameの完全症例フィルタ(症例単位での削除)

2022-09-13 14:30:25

質問

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))

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

これを試してみてください。

df %>% na.omit

またはこれ

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

またはこれ

library(tidyr)
df %>% drop_na

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

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の最新版とコメントを反映させるために更新しました。