You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

代码说明

  1. group_by(ind):按个体分组,确保所有计算仅在同一个体内进行。
  2. obs_event临时列:筛选出有有效观测(obs非NA)对应的event值,其余行设为NA,方便后续定位上一次有效观测的事件点。
  3. prev_obs_event:通过fill向下填充obs_event的NA值,再用lag获取当前行的上一个有效观测事件值,精准匹配每个有效观测对应的上一次观测事件。
  4. missed.events计算:仅对有有效观测的行执行当前event - 上一次观测event - 1的规则计算,无观测的行保持NA。

运行后即可得到你期望的结果。

内容的提问来源于stack exchange,提问作者ghaines

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:43:24