group_by のグループ番号でデータテーブルに番号/ラベルを付けるにはどうすればよいでしょうか? 質問する

group_by のグループ番号でデータテーブルに番号/ラベルを付けるにはどうすればよいでしょうか? 質問する

group_by(u, v)で観測された各異なる整数の組み合わせに対してtbl_df を実行します(u, v)


編集:これはその後、(現在は廃止されている)をgroup_indices()再度追加することで解決されました。dplyr 0.4.0


a) 次に、各グループに任意の異なる番号ラベル = 1、2、3 などを割り当てます。たとえば、組み合わせ (u、v) = = (2、3) はラベル 1 を取得し、(1、3) はラベル 2 を取得するなどです。3mutate()段階の要約と自己結合を使用せずに、これを 1 つで行うにはどうすればよいでしょうか。

dplyrには便利な関数がありますn()が、これは要素の数を返します内で全体ではなくグループグループ番号これdata.tableは単に.GRP

b) 実際に割り当てたいのは、文字列/文字ラベル ('A'、'B'、...) です。ただし、integer_to_label(i)以下のように使用できるため、整数でグループに番号を付けるだけで十分です。これら 2 つを結合する巧妙な方法がある場合を除きます。ただし、この部分は心配しないでください。

set.seed(1234)

# Helper fn for mapping integer 1..26 to character label
integer_to_label <- function(i) { substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",i,i) }

df <- tibble::as_tibble(data.frame(u=sample.int(3,10,replace=T), v=sample.int(4,10,replace=T)))

# Want to label/number each distinct group of unique (u,v) combinations
df %>% group_by(u,v) %>% mutate(label = n()) # WRONG: n() is number of element within its group, not overall number of group

   u v
1  2 3
2  1 3
3  1 2
4  2 3
5  1 2
6  3 3
7  1 3
8  1 2
9  3 1
10 3 4

KLUDGE 1: could do df %>% group_by(u,v) %>% summarize(label = n()) , then self-join

ベストアンサー1

現在のdplyrバージョン(1.0.0以上)

バージョン1.0以降、dplyrには新しい現在のグループIDそのための機能:

df %>% 
    group_by(u, v) %>% 
    mutate(label = cur_group_id()) ...
    

以前の dplyr バージョン (1.0.0 以前、この関数は非推奨ですが、1.0.10 でも利用可能です)

dplyr にはgroup_indices()次のように使用できる関数があります:

df %>% 
    mutate(label = group_indices(., u, v)) %>% 
    group_by(label) ...

おすすめ記事