データフレームの操作(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の与え方とか、何かしらあるとは思うのだけれども。

今日はここまで。

この記事が気に入ったらサポートをしてみませんか?