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

R语言如何基于相似性数据框填充生成对称相似矩阵

实现方案

直接按以下步骤运行代码即可实现对称填充效果,不需要依赖额外第三方包:

  1. 首先复现当前已有的数据对象:
# 现有代码生成的初始独热矩阵
df <- data.frame(seasons = c("Season1","Season2","Season3","Season4"))
for(i in unique(df$seasons)) {
  df[[paste0(i)]] <- ifelse(df$seasons==i,1,0)
}

# 提供的相似性数据框
sim_df <- data.frame(
  S1 = c("Season1", "Season3", "Season2"),
  S2 = c("Season2", "Season1", "Season3"),
  Value = c(3,5,4)
)
  1. 先把相似性配对补为双向对称结构,解决配对顺序不固定的问题:
# 互换S1、S2列生成反向配对,和原配对合并得到全量对称映射
sim_sym <- rbind(
  sim_df,
  setNames(sim_df[, c("S2", "S1", "Value")], c("S1", "S2", "Value"))
)
  1. 执行矩阵填充:
# 遍历所有季节列完成值替换
for (col in names(df)[-1]) {
  # 按「行季节+列季节」的组合匹配对应的相似值
  pair_match <- match(paste(df$seasons, col), paste(sim_sym$S1, sim_sym$S2))
  fill_val <- sim_sym$Value[pair_match]
  # 仅替换原矩阵中值为0、且能匹配到相似值的位置,保留对角线的1
  df[[col]] <- ifelse(df[[col]] == 0 & !is.na(fill_val), fill_val, df[[col]])
}

运行结果

最终生成的df完全符合对称填充要求:

seasons Season1 Season2 Season3 Season4
1 Season1       1       3       5       0
2 Season2       3       1       4       0
3 Season3       5       4       1       0
4 Season4       0       0       0       1

说明

  • 没有录入相似值的配对(示例中Season4和其余三个季节无对应记录)会保留初始值0,可根据需要自行调整替换规则
  • 相同季节的对角线位置会固定保留初始值1,不会被相似值覆盖
  • 无论原始相似性表中季节对的记录顺序是正序还是倒序,都可以被正确匹配填充

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:45:59