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

基于两列相同键对指定列求和并标记差异列值

解决你的R数据分组汇总需求

没问题,我来帮你搞定这个数据处理需求!先明确下核心逻辑:

  • 按Key和Date两列的组合分组,对组内的Value列求和
  • Year列如果组内所有值完全一致,就保留原值;如果有差异可按需调整逻辑,示例里暂按一致处理
  • Name和Type列如果组内存在不同值,就标记为"SUM";若组内值完全相同,则保留该值

示例代码实现

我们用dplyr包来完成这个操作,它的分组汇总语法非常直观好理解:

# 加载所需包
library(dplyr)

# 构造你的示例数据
df <- data.frame(
  Key = c("C", "C", "C", "A", "A", "A"),
  Date = c("2000-04", "2000-04", "2000-05", "2001-06", "2001-07", "2002-08"),
  Value = c(0.55, 0.60, 1.2, 4, 5, 2),
  Name = c("name1", "name2", "Name 4", "Name 2", "Name 3", "Name 1"),
  Type = c("x1", "x2", "x4", "x6", "x1", "x2"),
  Year = c(2000, 2000, 2000, 2001, 2001, 2002),
  stringsAsFactors = FALSE
)

# 执行分组汇总操作
df1 <- df %>%
  group_by(Key, Date) %>%
  summarize(
    Value = sum(Value),
    Name = ifelse(n_distinct(Name) == 1, first(Name), "SUM"),
    Type = ifelse(n_distinct(Type) == 1, first(Type), "SUM"),
    Year = ifelse(n_distinct(Year) == 1, first(Year), "SUM") # 若Year组内有差异,可修改此处标记逻辑
  ) %>%
  ungroup() # 取消分组状态,回归普通数据框格式

# 查看最终结果
print(df1)

输出结果验证

运行代码后,你会得到和预期完全匹配的结果:

# A tibble: 5 × 6
  Key   Date    Value Name  Type   Year
  <chr> <chr>   <dbl> <chr> <chr> <dbl>
1 A     2001-06   4   Name 2 x6     2001
2 A     2001-07   5   Name 3 x1     2001
3 A     2002-08   2   Name 1 x2     2002
4 C     2000-04   1.15 SUM   SUM    2000
5 C     2000-05   1.2 Name 4 x4     2000

代码逻辑说明

  • group_by(Key, Date):指定以Key+Date的组合作为分组依据
  • summarize():对每个分组执行汇总操作:
    • Value = sum(Value):直接对组内的数值求和
    • n_distinct(col):统计列内不同值的数量,若等于1说明组内值完全一致,就取第一个值;否则替换为"SUM"
  • ungroup():取消分组标记,避免后续操作受分组状态影响

如果你的实际数据中Year存在组内不一致的情况,直接修改Year行的逻辑即可适配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:55