データフレームの操作(3).R
要約
・pivot_wider(values fn = sum)で簡易集計
・意図的に重複行を作る
・予め、集計のためのカウント用数値を格納した列を追加する
tidyr::pivot_wider(values_fn = )で簡易集計
思い付きでやってみた、pivot_wider()を使った簡易集計。
下は各rarityが何回ずつ出たか、setごとに集計したものだ。
各setにおける何回目の試行かを示すtime列は省き、代わりにカウント用のcnt列を追加してある。cnt列は1が入っているだけ。
例えばset1ではrarity=3になっている行が4つ重複しており、各行のcnt列には1が入っている。
values_from = cnt, values_fn = sumと指定することで、重複した4行のcnt列の値はwideに変換した後のset1の`3`列のセル(要素)にsumされて押し込められる。
すなわちlongのときに重複していた行数=そのrarityが出た数が集計できる。
> gacha.l[,c(1,3)]
# A tibble: 100 x 2
set rarity
<int> <int>
1 1 3
2 1 3
3 1 1
4 1 4
5 1 3
6 1 2
7 1 4
8 1 3
9 1 4
10 1 4
# ... with 90 more rows
> mutate(gacha.l[,c(1,3)], cnt = 1) %>%
pivot_wider(names_from = rarity, values_from = cnt, values_fn = sum)
# A tibble: 10 x 6
set `3` `1` `4` `2` `5`
<int> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1 4 1 4 1 NA
2 2 NA 4 2 NA 4
3 3 1 1 4 2 2
4 4 3 1 NA 3 3
5 5 2 1 3 NA 4
6 6 1 2 1 1 5
7 7 4 1 NA 3 2
8 8 2 3 3 1 1
9 9 1 1 4 2 2
10 10 1 1 4 2 2
ただ、列名はrarity列に出てきた順に作られているようなので、後から列の並び替えは適宜必要だが。(というのを実はid_colsで何とかできたりする?しない?)
wideからlongに変換した場合など値が欠損した行を存在させている場合は、そこに0を入れるなどの工夫がさらに必要なのだけれども、とりあえず。
以前の記事でvalues_fnに用途がないとか言っておきながら、こんな持ち上げ方をしてしまった。ごめんな、values_fn。
こっそり、文字列をうまく集められないかとやってみてはいるのだけど、なかなかうまくいかない。
functionの与え方とか、何かしらあるとは思うのだけれども。
今日はここまで。