Dplyr を使用して na 行を失わずにデータ フレームをフィルタリングする方法
次の基本構文を使用すると、R のdplyrおよびTidyrパッケージの関数を使用して、NA 値を含む行を失わずにデータ フレームをフィルターできます。
library (dplyr) library (tidyr) #filter for rows where team is not equal to 'A' (and keep rows with NA) df <- df %>% filter((team != ' A ') %>% replace_na( TRUE ))
この式では、 Tidyrパッケージのreplace_na()関数を使用して NA 値を TRUE に変換し、フィルタリング中にデータ フレームから NA 値が削除されないように注意してください。
次の例は、この構文を実際に使用する方法を示しています。
例: dplyr を使用して NA 行を失わずにデータ フレームをフィルタリングする
R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。
#create data frame df <- data. frame (team=c('A', NA, 'A', 'B', NA, 'C', 'C', 'C'), points=c(18, 13, 19, 14, 24, 21, 20, 28), assists=c(5, 7, 17, 9, 12, 9, 5, 12)) #view data frame df team points assists 1 to 18 5 2 <NA> 13 7 3 A 19 17 4 B 14 9 5 <NA> 24 12 6 C 21 9 7 C 20 5 8 C 28 12
ここで、 dplyrパッケージのfilter()関数を使用して、チーム列の値が A に等しくない行のみを含むようにデータ フレームをフィルター処理するとします。
library (dplyr) #filter for rows where team is not equal to 'A' df <- df %>% filter(team != ' A ') #view updated data frame df team points assists 1 B 14 9 2 C 21 9 3 C 20 5 4 C 28 12
チーム列の値が NA に等しい行を含め、チーム列の値が A に等しいすべての行がフィルタリングされていることに注意してください。
チームがA に等しい行をフィルターし、NA 値の行を保持したい場合は、次の構文を使用できます。
library (dplyr) library (tidyr) #filter for rows where team is not equal to 'A' (and keep rows with NA) df <- df %>% filter((team != ' A ') %>% replace_na( TRUE )) #view updated data frame df team points assists 1 <NA> 13 7 2 B 14 9 3 <NA> 24 12 4 C 21 9 5 C 20 5 6 C 28 12
チーム列の値が A に等しい行はすべてフィルタリングされましたが、チーム列の値が NA に等しい行は保持したことに注意してください。
注: Tidyr replace_na()関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、dplyr で他の一般的な機能を実行する方法を説明します。
dplyrを使用して行番号でフィルタリングする方法
dplyrを使って複数の条件でフィルタリングする方法
dplyr で「含まれていない」フィルターを使用する方法