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) ...