【问题标题】:generate id for each group with repeated and missing observations为具有重复和缺失观察的每个组生成 id
【发布时间】:2020-09-04 00:26:02
【问题描述】:

我有一个数据集,其中包含数周内观察到的个人。有些人在几周内没有观察到,有些人在同一周内有几次观察。我需要创建一个特定于个人的每周 ID(代码中的 id_week)。如果一个人在一周内有两次或多次观察,则两次观察的 id_week 应该相同。如果一个人在给定的一周内没有观察到,那么下一周的观察应该从最后一个观察点开始。这将产生以下数据:

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)],但它只给了我几个星期的 ID,没有考虑到个人。我也尝试了 dplyr 解决方案,但它没有考虑一周内的重复观察,为每一行分配一个 ID,这不是我需要的。

dt%>%
group_by(individ)%>%
mutate(pp = row_number(week))

【问题讨论】:

    标签: r datatable dplyr grouping panel


    【解决方案1】:

    这里有几个选择:

    1) 使用dense_rank

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

    2) 使用matchunique

    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】:

      使用data.table的选项:

      setDT(dt)[, id_week := rleid(week), individ]
      

      【讨论】:

      • 谢谢,虽然这并没有给我个人特定的 id_week。
      • 抱歉错过了by
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2020-09-05
      • 1970-01-01
      • 2020-10-13
      • 1970-01-01
      • 2020-09-21
      • 2017-12-08
      相关资源
      最近更新 更多