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

R dataframe按ID分组计算各访视x值相对筛查行的差值方法

R实现按ID分组计算各访视相对于筛查行的差值

示例数据集

set.seed(123)
df1 <- 0
df1$visit <- rep(c("scr", "1mo", "3mo", "6mo0", "12mo", "2yr"), 2)
df1 <- as.data.frame(df1)
df1$id <- rep(c("101","102"), each = 6)
df1 <- df1[ ,-c(1)]
df1$x <- sample(0:30, 12, replace = T)

df1$want = c(0, -16, -12, -17, -28, -21, 0, 4, -7, -13, 2, -4)

需求说明

对每个ID分组,将分组内所有行的x值减去该ID对应筛查(visit为scr)行的x值,生成相对于筛查访视的变化变量。

可复用代码方案

方案1:dplyr实现(推荐,代码简洁易读)

library(dplyr)
df1 <- df1 %>%
  group_by(id) %>%
  mutate(x_change_from_scr = x - x[visit == "scr"]) %>%
  ungroup()

运行后生成的x_change_from_scr列和示例给出的want列完全一致。

方案2:基础R实现(无需加载第三方包)

# 先提取每个ID对应的筛查值
scr_val_df <- aggregate(x ~ id, data = df1[df1$visit == "scr", ], FUN = c)
# 匹配ID后计算差值
df1$x_change_from_scr <- df1$x - scr_val_df$x[match(df1$id, scr_val_df$id)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:07