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

基于DataFrame构建Pattern相等时的无向邻接矩阵(值累加)

问题描述

我有如下DataFrame:

mydf <- data.frame(Country=c('USA','Brazil','China','Italy','Ghana','Brazil','USA','China','USA'),
                   Pattern=c('XXZ','XXX','XYX','XXZ','XXX','XXX','XYZ','XXX','XYZ'),
                   Value=c(1,2,5,4,1,2,3,1,6))

需要构建一个无向邻接矩阵,要求仅当Pattern列取值相同时进行匹配,且对应Value值进行累加。示例输出如下:

From     To   Pattern  Value
    Brazil  Brazil  XXX    4
    Brazil  China   XXX    3
    Brazil  Ghana   XXX    3
解决方案

可以借助dplyr和tidyr包,通过分组配对、关联原数据、聚合计算实现需求,代码如下:

library(dplyr)
library(tidyr)

result <- mydf %>%
  # 按Pattern分组,确保同规则内的国家才会匹配
  group_by(Pattern) %>%
  # 生成组内所有国家的无向配对(包含自身配对)
  expand(From = Country, To = Country) %>%
  # 关联原表获取配对双方的Value值
  left_join(mydf, by = c("Pattern", "From" = "Country")) %>%
  left_join(mydf, by = c("Pattern", "To" = "Country")) %>%
  # 计算配对的Value累加和
  mutate(Value = Value.x + Value.y) %>%
  # 筛选保留无向图的唯一组合(避免A-B和B-A重复)
  filter(From <= To) %>%
  # 整理输出列并排序
  select(From, To, Pattern, Value) %>%
  arrange(Pattern, From) %>%
  ungroup()

# 查看最终结果
print(result)
结果说明

运行代码后会得到符合要求的无向邻接表:

  • 仅同Pattern的国家之间生成配对
  • 国家自身配对的Value为自身对应值的2倍(如示例中Brazil的XXX组Value=2+2=4)
  • 不同国家配对的Value为双方对应值的和(如示例中Brazil和China的XXX组Value=2+1=3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:53:24