如何用R语言为tibble新增个体观测间采样间隔列?
解决方案
首先加载所需包并构造数据:
library(tibble) library(dplyr) library(tidyr) df <- tibble( ind = c(rep("A", 10), rep("B", 10)), event = c(1:10, 1:10), obs = c(NA, NA, 1, 2, NA, NA, NA, 4, NA, 5, 1, NA, NA, NA, 2, NA, 3, 4, NA, 5) )
接下来按个体分组,计算missed.events列:
result <- df %>% group_by(ind) %>% mutate( # 仅保留有观测值的event,其余为NA obs_event = if_else(!is.na(obs), event, NA), # 向下填充获取上一次有观测值的event prev_obs_event = lag(fill(obs_event, .direction = "down")$obs_event), # 按规则计算missed.events,无观测值的行设为NA missed.events = if_else(!is.na(obs), event - prev_obs_event - 1, NA_real_) ) %>% select(-obs_event, -prev_obs_event) # 移除临时列 print(result)
代码说明
group_by(ind):按个体分组,确保所有计算仅在同一个体内进行。obs_event临时列:筛选出有有效观测(obs非NA)对应的event值,其余行设为NA,方便后续定位上一次有效观测的事件点。prev_obs_event:通过fill向下填充obs_event的NA值,再用lag获取当前行的上一个有效观测事件值,精准匹配每个有效观测对应的上一次观测事件。missed.events计算:仅对有有效观测的行执行当前event - 上一次观测event - 1的规则计算,无观测的行保持NA。
运行后即可得到你期望的结果。
内容的提问来源于stack exchange,提问作者ghaines
相关产品推荐
相关产品推荐

