Dplyr を使用してデータをグループ化およびフィルターする方法
R の dplyr パッケージを使用して、次の基本構文を使用してデータをグループ化およびフィルター処理できます。
df %>% group_by(team) %>% filter(any(points = = 10 ))
この特定の構文は、チームと呼ばれる列ごとにデータ フレームをグループ化し、ポイント列の少なくとも 1 つの値が 10 に等しいグループのみをフィルターします。
次の例は、この構文を実際に使用する方法を示しています。
例: dplyr を使用したデータのグループ化とフィルター処理
R に、さまざまなバスケットボール選手に関する情報を含む次のデータ フレームがあるとします。
#create data frame
df <- data. frame (team=c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'),
points=c(10, 15, 8, 4, 10, 10, 12, 12, 7))
#view data frame
df
team points
1 to 10
2 to 15
3 to 8
4 B 4
5 B 10
6 B 10
7 C 12
8 C 12
9 C 7
次のコードを使用して、 [チーム]列の値でデータ フレームをグループ化し、 [ポイント]列に 10 に等しい値が少なくとも 1 つ含まれていないすべてのグループをフィルターで除外できます。
library (dplyr)
#group by team and filter out teams where no points value is equal to 10
df %>%
group_by(team) %>%
filter(any(points == 10 ))
# A tibble: 6 x 2
# Groups: team [2]
team points
1 to 10
2 to 15
3 to 8
4 B 4
5 B 10
6 B 10
チーム「C」のポイント列に 10 に等しい値がないため、チームが「C」に等しいすべての行がフィルターされることに注意してください。
これは適用できるフィルターの単なる例であることに注意してください。
たとえば、ポイント列の値が少なくとも 1 つ 13 より大きいチームをフィルタリングする別のフィルタを適用できます。
library (dplyr)
#group by team and filter out teams where no points value is greater than 13
df %>%
group_by(team) %>%
filter(any(points > 13 ))
# A tibble: 3 x 2
# Groups: team [1]
team points
1 to 10
2 to 15
3 to 8
少なくとも 1 つのポイント値が 13 より大きい唯一のチームであるため、チームが「A」に等しい行のみが保持されることに注意してください。
注: dplyr のフィルター関数の完全なドキュメントはここで見つけることができます。
追加リソース
次のチュートリアルでは、dplyr で他の一般的な操作を実行する方法を説明します。
dplyrを使用してグループごとに最初の行を選択する方法
dplyrを使って複数の条件でフィルタリングする方法
dplyrを使用して特定の文字列を含む行をフィルタリングする方法