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

R语言:不使用merge函数添加非分组变量的方法问询

问题解答

你的这段代码不可行,核心问题如下:

  • total_dose是分组聚合后的结果(每组仅1行),但你用原始数据df的多维度分组条件去拆分它,两者行数完全不匹配,会导致数据无意义重复或结构混乱;
  • total_dose本身只包含pid、medname、date、op1四个字段,拆分合并后也无法自动生成dose、var1等缺失变量。

正确实现方案

根据你的需求(保留dose、var1/2/3且不用merge),分两种场景处理:

场景1:保留原始数据所有行,同时添加组内求和值

如果需要保留每一行的原始dose和var1/2/3,同时新增该组的求和结果op1,用mutate替代summarize即可——它会在原始数据基础上新增列,自动保留所有未参与分组的变量:

total_dose <- df %>%
  group_by(pid, medname, date) %>%
  mutate(op1 = sum(dose)) %>%
  ungroup() # 可选,取消分组状态,方便后续操作

head(total_dose, 10)

输出结果会包含所有你需要的字段:pid、medname、date、dose、op1、var1、var2、var3。

场景2:仅保留每组一行,同时带上组内唯一的var1/2/3

如果var1/2/3在同一分组内的值完全一致(即每组内所有行的这些变量无差异),可以在summarize中直接指定保留这些变量,同时按需处理dose(比如取组内第一个值):

total_dose <- df %>%
  group_by(pid, medname, date) %>%
  summarize(
    op1 = sum(dose),
    dose = first(dose), # 若需保留dose,明确取组内某一个值,比如第一个
    var1 = first(var1),
    var2 = first(var2),
    var3 = first(var3)
  ) %>%
  ungroup()

注意:如果var1/2/3在同一分组内有不同值,需明确用first()/last()/mean()等函数定义保留规则,否则会出现数据歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:09