通过递增样本编号分配组 ID

Assigning group ID by incrementing sample number

我有来自记录器的数据,该数据识别每组具有连续编号的样本,但原始数据不包含组标识符。人们可以知道新组从哪里开始,因为样本 ID == 1。

如何分配分组变量以便我可以使用 group_by() 进行分组汇总等?

df_have <- tribble(
  ~n, ~value,
  1, .1,
  2, .3,
  1, .2,
  2, .4,
  3, .6,
  1, .7
)

df_want <- tribble(
  ~group, ~n, ~value,
  "A", 1, .1,
  "A", 2, .3,
  "B", 1, .2,
  "B", 2, .4,
  "B", 3, .6,
  "C", 1, .7
)

当前行与前一行相减,如果差值小于 1,则使用 cumsum 增加计数器。我们可以使用内置向量 LETTERS 来分配组名。

library(dplyr)

df_have %>%
  mutate(group = LETTERS[cumsum(n - lag(n, default = first(n)) < 1)])

#     n value group
#  <dbl> <dbl> <chr>
#1     1   0.1 A    
#2     2   0.3 A    
#3     1   0.2 B    
#4     2   0.4 B    
#5     3   0.6 B    
#6     1   0.7 C    

基本 R 中的相同逻辑可以实现为:

transform(df_have, group = LETTERS[cumsum(c(TRUE, diff(n) < 1))])