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を使用して特定の文字列を含む行をフィルタリングする方法

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です