gpt4 book ai didi

r - 如何通过group_by中的group-number编号/标记数据表?

转载 作者:行者123 更新时间:2023-12-03 13:39:38 25 4
gpt4 key购买 nike

我有一个tbl_df,我想为每个用group_by(u, v)观察到的不同整数组合(u, v)



编辑:这通过在dplyr 0.4.0中添加group_indices()来解决



a)然后我想为每个不同的组分配一些任意的不同编号label = 1,2,3 ...
例如(u,v)==(2,3)的组合可以得到标签1,(1,3)可以得到2,依此类推。
如何使用一个mutate()进行此操作,而没有三步汇总和自我联接?

dplyr具有一个整洁的函数n(),但它给出的是其组内元素的数量,而不是组的总数。 In data.table this would simply be called .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 <- tbl_df(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

最佳答案

更新的答案

get_group_number = function(){
i = 0
function(){
i <<- i+1
i
}
}
group_number = get_group_number()
df %>% group_by(u,v) %>% mutate(label = group_number())


您还可以考虑以下略有不可读的版本

group_number = (function(){i = 0; function() i <<- i+1 })()
df %>% group_by(u,v) %>% mutate(label = group_number())




使用 iterators

library(iterators)

counter = icount()
df %>% group_by(u,v) %>% mutate(label = nextElem(counter))

关于r - 如何通过group_by中的group-number编号/标记数据表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com