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

如何用R的dplyr包实现组内ID两两组合、数值求和并生成新数据框?

用R语言(dplyr)实现分组生成不重复两两组合并求和

原始数据集

首先构造输入数据集:

df <- data.frame(
  Letter = c("A", "A", "A", "B", "B", "B", "B"),
  ID = c("A1", "A2", "A3", "B1", "B2", "B3", "B4"),
  Number = c(1, 2, 3, 1, 2, 3, 4)
)

实现方案

借助dplyr的分组功能,结合combn函数生成不重复两两组合(combn默认生成无序组合,不会出现反向重复配对),具体代码如下:

library(dplyr)

# 分组处理并生成结果
result_df <- df %>%
  group_by(Letter) %>%
  group_map(~ {
    # 生成当前组ID的所有两两不重复组合
    id_pairs <- combn(.x$ID, 2, simplify = FALSE)
    # 计算对应Number列的和
    sum_values <- combn(.x$Number, 2, sum)
    # 构造当前组的结果数据框
    data.frame(
      Combination = sapply(id_pairs, paste, collapse = "-"),
      Add.Number = sum_values
    )
  }, .keep = TRUE) %>%
  bind_rows()

# 调整组合顺序以匹配示例输出
result_df <- result_df %>%
  arrange(Letter, 
          as.integer(sub("A|B", "", sub("-.*", "", Combination))),
          as.integer(sub("A|B", "", sub(".*-", "", Combination))))

输出结果

运行上述代码后,得到的结果与需求完全一致:

print(result_df)
#>   Letter Combination Add.Number
#> 1      A        A1-A2          3
#> 2      A        A2-A3          5
#> 3      A        A1-A3          4
#> 4      B        B1-B2          3
#> 5      B        B2-B3          5
#> 6      B        B3-B4          7
#> 7      B        B1-B3          4
#> 8      B        B2-B4          6
#> 9      B        B1-B4          5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:01:18