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

R语言批量生成同名前缀多列的0-12月变量差值

批量生成重复测量变量的差值列

针对你拥有的多变量重复测量宽表,以下是用lapply和Reduce批量计算每个变量12月与0月差值的解决方案:

步骤1:提取需要计算差值的变量前缀

首先从宽表列名中提取所有测量变量的前缀(如SBP、BMI):

# 筛选出非id、非group的列,提取前缀并去重
vars <- unique(sub("_\\d+$", "", setdiff(colnames(df1), c("id", "group"))))

步骤2:批量生成差值列

用lapply遍历每个变量前缀,生成包含id和对应差值列的小数据框:

library(dplyr)
library(tidyr)

diff_cols <- lapply(vars, function(var) {
  df1 %>% 
    # 只保留当前变量的各时间点列和id
    select(id, starts_with(var)) %>% 
    # 计算12月减0月的差值,列名格式为[变量名]_diff
    mutate(!!paste0(var, "_diff") := .data[[paste0(var, "_12")]] - .data[[paste0(var, "_0")]]) %>% 
    # 只保留id和差值列
    select(id, ends_with("_diff"))
})

步骤3:合并差值列到原宽表

用Reduce结合left_join,将所有差值列合并到原数据中:

df_final <- Reduce(function(x, y) left_join(x, y, by = "id"), c(list(df1), diff_cols))

验证结果

查看最终数据框,会自动生成所有变量的差值列:

print(df_final)

输出结果与你预期的格式一致,且无需手动逐个处理变量,适合变量数量众多的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:58:10