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

长格式纵向数据按分组计算各访视减V1/V0值且缺失visit0返回NA方案

实现代码与说明

原方案依赖访视按0、1顺序排列且无缺失,通过行位置取对应值,当某ID缺失visit=0/1时取到的数值会错位,无法满足需求。

核心思路

  • 不按行位置取值,直接匹配visit的实际值提取对应ID的基线value,无匹配时自动返回NA
  • 无需补全缺失的visit行,也不强制要求数据集的行顺序

基础实现代码

library(dplyr)

# 构造含缺失的测试数据集,验证缺失场景
set.seed(123)
df <- data.frame(
  value = rnorm(28), 
  visit = c(0:9, 1:9, 0,2:9), # ID B缺失visit=0,ID C缺失visit=1
  id = c(rep("A", 10), rep("B",9), rep("C",9))
)

# 核心实现逻辑
df_res <- df %>%
  group_by(id) %>%
  mutate(
    value_chg_v1 = value - value[visit == 1],
    value_chg_v0 = value - value[visit == 0]
  ) %>%
  ungroup()

代码说明

分组后每组内执行value[visit == x]时:

  • 若该ID存在visit=x的行,返回对应行的value值
  • 若该ID不存在visit=x的行,返回NA,整组的对应差值变量自动填充为NA
    完全匹配无需补全缺失行、缺失时返回NA的需求。

优化版本(兼容重复visit场景)

如果数据集可能存在同一个ID有重复的visit=0/1记录,可加first()取第一个匹配值,避免长度不匹配报错:

df_res <- df %>%
  group_by(id) %>%
  mutate(
    value_chg_v1 = value - first(value[visit == 1]),
    value_chg_v0 = value - first(value[visit == 0])
  ) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:18:03