为具有重复和缺失观察值的每个组生成 id
generate id for each group with repeated and missing observations
我有一个数据集,其中包含数周内观察到的个人。有些人在几周内没有观察到,有些人在同一周内有几次观察。我需要创建一个特定于个人的每周 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))
我有 tride dt[, id := .GRP, by = .(individ, week)]
但它只给了我几个星期的 ID,没有考虑个人。我也尝试过 dplyr 解决方案,但它不考虑一周内的重复观察,为每一行分配一个 ID,这不是我需要的。
dt%>%
group_by(individ)%>%
mutate(pp = row_number(week))
使用data.table
的选项:
setDT(dt)[, id_week := rleid(week), individ]
这里有几个选择:
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]
我有一个数据集,其中包含数周内观察到的个人。有些人在几周内没有观察到,有些人在同一周内有几次观察。我需要创建一个特定于个人的每周 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))
我有 tride dt[, id := .GRP, by = .(individ, week)]
但它只给了我几个星期的 ID,没有考虑个人。我也尝试过 dplyr 解决方案,但它不考虑一周内的重复观察,为每一行分配一个 ID,这不是我需要的。
dt%>%
group_by(individ)%>%
mutate(pp = row_number(week))
使用data.table
的选项:
setDT(dt)[, id_week := rleid(week), individ]
这里有几个选择:
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]