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

合并命名顺序不同的行并聚合对应数值

R语言合并同组交互项并求和的解决方案

给定如下数据框:

df <- data.frame("interaction" = c("A_B","A_C","D_B","B_A", "C_A"), 
                 "value" = c(10,25,6,1,4))

其中interaction列中如A_B与B_A属于同一交互,需要将对应value值求和,得到统一格式的结果。以下提供两种可行方案:

方案一:使用tidyverse工具链

借助dplyr和stringr包实现,代码逻辑清晰易读:

library(tidyverse)

df_processed <- df %>%
  # 拆分交互项为两个独立变量
  separate(interaction, into = c("var1", "var2"), sep = "_") %>%
  # 按固定顺序排序变量,生成统一的交互名
  rowwise() %>%
  mutate(interaction = paste(sort(c(var1, var2)), collapse = "_")) %>%
  ungroup() %>%
  # 按统一交互名分组求和
  group_by(interaction) %>%
  summarise(value = sum(value))

# 查看结果
df_processed

运行后输出:

# A tibble: 3 × 2
  interaction value
  <chr>       <dbl>
1 A_B            11
2 A_C            29
3 D_B             6

方案二:Base R实现(无需额外包)

如果不想加载第三方包,可使用Base R的原生函数完成:

# 拆分交互项并生成统一格式的交互名
unified_interact <- sapply(strsplit(df$interaction, "_"), function(x) paste(sort(x), collapse = "_"))
# 按统一交互名分组求和
df_processed_base <- aggregate(value ~ unified_interact, data = cbind(df, unified_interact), sum)
# 重命名列匹配需求
colnames(df_processed_base) <- c("interaction", "value")

# 查看结果
df_processed_base

运行后输出与方案一一致:

interaction value
1         A_B    11
2         A_C    29
3         D_B     6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:16