概要
dplyr
パッケージに含まれるadd_tally()
とadd_count()
は、group_by()
とmutate()
の機能を併せ持つ関数です。類似する関数にtally()
とcount()
が存在します。
関連ページ
関数
add_tally(x, wt, sort = FALSE, name = "n")
add_count(x, ..., wt = NULL, sort = FALSE, name = "n")
引数 | 指定 | 説明 |
---|---|---|
x | 必須 | データフレーム |
… | 任意 | add_count() で使用するグループ化する列を指定する |
wt | 任意 | 行の重みを指定する 未指定の場合は1行1件でカウントする |
sort | 任意 | 集計結果で降順に並べ替える場合は TRUE を指定する |
name | 任意 | 集計結果の列名を指定する |
使い方
解説用データフレーム
df <- tibble(
x1 = c('A', 'A', 'B', 'B', 'B'),
w1 = c(1, 2, 3, 4, 5)
)
> df
# A tibble: 5 x 2
x1 w1
<chr> <dbl>
1 A 1
2 A 2
3 B 3
4 B 4
5 B 5
1.行数の取得
1-1.行数の取得
以下のコードは、全て同じ結果を返します。
# mutate()を使用した例
group_by(df, x1) %>%
mutate(n = n()) %>%
ungroup()
# add_tally()を使用した例
group_by(df, x1) %>%
add_tally() %>%
ungroup()
# add_count()を使用した例
add_count(df, x1)
# A tibble: 5 x 3
x1 w1 n
<chr> <dbl> <dbl>
1 A 1 2
2 A 2 2
3 B 3 3
4 B 4 3
5 B 5 3
1-2.重み付き行数の取得
以下のコードは、全て同じ結果を返します。
# mutate()を使用した例
group_by(df, x1) %>%
mutate(n = sum(w1)) %>%
ungroup()
# add_tally()を使用した例
group_by(df, x1) %>%
add_tally(w1) %>%
ungroup()
# add_count()を使用した例
add_count(df, x1, wt = w1)
# A tibble: 5 x 3
x1 w1 n
<chr> <dbl> <dbl>
1 A 1 3
2 A 2 3
3 B 3 12
4 B 4 12
5 B 5 12
2.オプション
2-1.列名の変更
以下のコードは、全て同じ結果を返します。
# mutate()を使用した例
group_by(df, x1) %>%
mutate(y = sum(w1)) %>%
ungroup()
# add_tally()を使用した例
group_by(df, x1) %>%
add_tally(w1, name = 'y') %>%
ungroup()
# add_count()を使用した例
add_count(df, x1, wt = w1, name = 'y')
# A tibble: 5 x 3
x1 w1 y
<chr> <dbl> <dbl>
1 A 1 3
2 A 2 3
3 B 3 12
4 B 4 12
5 B 5 12
2-2.降順の並び替え
以下のコードは、全て同じ結果を返します。
# mutate()を使用した例
group_by(df, x1) %>%
mutate(n = sum(w1)) %>%
ungroup() %>%
arrange(desc(n))
# add_tally()を使用した例
group_by(df, x1) %>%
add_tally(w1, sort = TRUE) %>%
ungroup()
# add_count()を使用した例
add_count(df, x1, wt = w1, sort = TRUE)
# A tibble: 5 x 3
x1 w1 n
<chr> <dbl> <dbl>
1 B 3 12
2 B 4 12
3 B 5 12
4 A 1 3
5 A 2 3