R のグループごとに一意の値を数える方法 (例あり)


次のメソッドを使用して、R のグループごとの一意の値の数をカウントできます。

方法 1: Base R を使用する

 results <- aggregate(data=df, values_var~group_var, function (x) length ( unique (x)))

方法 2: dplyr を使用する

 library (dplyr)

results <- df %>%
  group_by(group_var) %>%
  summarize(count = n_distinct (values_var))

方法 3: data.table を使用する

 library (data.table)

df <- data.table(df)
results <- df[, .(count = length ( unique (values_var))), by = group_var]

各メソッドはまったく同じ結果を返しますが、基本的な R メソッドは、大きなデータ フレームを処理する場合に大幅に遅くなる傾向があります。

次の例は、次のデータ フレームでこれらの各メソッドを実際に使用する方法を示しています。

 #create data frame
df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C'),
                 points=c(10, 10, 14, 14, 18, 19, 20, 20, 20))

#view data frame
df

  team points
1 to 10
2 to 10
3 to 14
4 to 14
5 B 18
6 B 19
7 C 20
8 C 20
9 C 20

方法 1: Base R を使用してグループごとに一意の値をカウントする

次のコードは、ベース R を使用して各チームの個別のポイント値の数をカウントする方法を示しています。

 #count unique points values by team
results <- aggregate(data=df, points~team, function (x) length ( unique (x)))

#view results
results

  team points
1 TO 2
2 B 2
3 C 1

結果から次のことがわかります。

  • チーム A には2 つの固有のポイント値があります。
  • チーム B には2 つの固有のポイント値があります。
  • チーム C には1 つの固有のポイント値があります。

方法 2: dplyr を使用してグループごとに一意の値を数える

次のコードは、dplyr を使用して各チームの個別のポイント値の数をカウントする方法を示しています。

 library (dplyr)

#count unique points values by team
results <- df %>%
  group_by(team) %>%
  summarize(count = n_distinct (points))

#view results
results

# A tibble: 3 x 2
  team count
1 TO 2
2 B 2
3 C 1

これらの結果は、基本的な R メソッドの結果と一致することに注意してください。

方法 3: data.table を使用してグループごとに一意の値を数える

次のコードは、data.table を使用して各チームの個別のポイント値の数をカウントする方法を示しています。

 library (data.table)

#convert data frame to data table
df <- data.table(df)

#count unique points values by team 
results <- df[, .(count = length ( unique (points))), by = team]

#view results
results

   team count
1 TO 2
2:B2
3: C 1

これらの結果は、前の 2 つの方法の結果と一致することに注意してください。

追加リソース

次のチュートリアルでは、dplyr を使用して他の一般的な操作を実行する方法について説明します。

dplyrを使用して値を再コード化する方法
dplyr で NA をゼロに置き換える方法
dplyr を使用して変数をグループ別に並べ替える方法
dplyrを使用してグループごとに最初の行を選択する方法

コメントを追加する

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