我有一个 tbl_df,我想在其中group_by(u, v)
观察到的每个不同的整数组合(u, v)
。
编辑:这随后通过group_indices()
在dplyr 0.4.0中添加(现已弃用)来解决
a)然后我想为每个不同的组分配一些任意不同的数字标签= 1,2,3 ...例如组合(u,v)==(2,3)可以获得标签1,(1,3)可以得到 2,以此类推。mutate()
如果没有三步汇总和自联接,如何使用 one 来做到这一点?
dplyr 有一个简洁的功能n()
,但它给出了其组内元素的数量,而不是组的总数。在data.table
这将简单地称为.GRP
。
b)实际上我真正想要分配一个字符串/字符标签('A','B',...)。但是按整数对组进行编号就足够了,因为我可以integer_to_label(i)
如下使用。除非有一个聪明的方法来合并这两者?但不要为这部分出汗。
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