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

R语言dplyr分组汇总 拼接字符串值为列表列保留原始值

实现方法

你提出的新增列分离原始字符串与计算值的思路完全可行,只需在分组汇总阶段同步处理两列即可,无需拆分两套逻辑。运行以下代码即可得到保留所有带(replaced)标注原始值的目标输出:

library(dplyr)
dat_in_new <- dat %>%
  # 提前拆分两列:一列存原始字符串,一列提取纯数值用于计算
  mutate(
    value_raw = value,
    value_num = as.numeric(gsub(" .*", "", value))
  ) %>%
  # 按指定字段分组
  group_by(rn, upper, direction) %>%
  # 同步完成数值求和、原始值留存
  summarise(
    freq_calc = sum(value_num, na.rm = TRUE),
    freq_raw = first(value_raw),
    .groups = 'drop_last'
  ) %>%
  # 保留原有添加分组总计行的逻辑
  group_modify(~add_row(
    .,
    freq_calc = sum(.$freq_calc),
    freq_raw = as.character(sum(.$freq_calc))
  )) %>%
  # 按rn聚合为列表列
  group_by(rn) %>%
  summarise(
    freq = list(freq_raw),
    .groups = "drop"
  )

逻辑说明

  • 用正则gsub(" .*", "", value)提取value字段中空格前的数字部分,无论条目后是否带(replaced)标注,都能正确转换为数值,求和结果和你原有代码的计算结果完全一致
  • 同一rn + upper + direction分组下仅对应唯一一条value记录,汇总时直接取原始字符串存入freq_raw即可,不会出现错配
  • 总计行是分组求和得到的数值,直接转为字符串存入即可,和其他行格式统一

输出效果

运行后得到的数据集结构完全符合预期:

# A tibble: 2 × 2
  rn    freq      
  <chr> <list>    
1 A     <chr [25]>
2 B     <chr [25]>

查看列表列内的内容,所有带(replaced)的原始标注均完整保留,总计行的求和值也正常存入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:27:39