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を使用してグループごとに最初の行を選択する方法