代码之家  ›  专栏  ›  技术社区  ›  Paul van Oppen

R:通过两个分组变量之一重置的子组计数器[重复]

  •  1
  • Paul van Oppen  · 技术社区  · 6 年前

    dt<-data.frame(individ=c(1,1,1,2,2,2,3,3,3,3),week=c(1,2,2,1,2,4,1,3,4,4),id_week=c(1,2,2,1,2,3,1,2,3,3))
    

    我有三轮车 dt[, id := .GRP, by = .(individ, week)]

    dt%>%
    group_by(individ)%>%
    mutate(pp = row_number(week))
    
    0 回复  |  直到 6 年前
        1
  •  3
  •   Ronak Shah    6 年前

    以下是几个备选方案:

    1) 使用 dense_rank :

    library(dplyr)
    dt %>% group_by(individ) %>% mutate(id_week = dense_rank(week))
    

    2) 使用 match unique :

    dt$id_week <- with(dt, ave(week, individ, FUN = function(x) match(x, unique(x))))
    

    3) 转换为 factor integer :

    library(data.table)
    setDT(dt)[, id_week := as.integer(factor(week)), individ]
    
        2
  •  2
  •   chinsoon12    6 年前

    使用 data.table :

    setDT(dt)[, id_week := rleid(week), individ]
    
    推荐文章