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

如何用R的dplyr::pivot_wider生成表间列名匹配计数矩阵?

生成表间列匹配数矩阵的解决方案

核心代码实现

library(tidyverse)

# 一步生成目标矩阵
result <- df %>%
  # 按表名分组,将每个表的列打包成列表
  group_by(table_name) %>%
  summarize(cols = list(column_name), .groups = "drop") %>%
  # 生成所有表的两两组合(包含自身)
  cross_join(., ., suffix = c("_x", "_y")) %>%
  # 计算每对表的共同列数量
  mutate(match_num = map2_int(cols_x, cols_y, ~length(intersect(.x, .y)))) %>%
  # 保留需要的字段
  select(table_name_x, table_name_y, match_num) %>%
  # 转换为宽格式
  pivot_wider(names_from = table_name_y, values_from = match_num) %>%
  # 将表名设为行名
  column_to_rownames("table_name_x")

# 查看结果
result

运行后输出:

tbl1 tbl2 tbl3
tbl1    3    1    0
tbl2    1    3    2
tbl3    0    2    3

分步解释

  1. 整理列集合:按table_name分组,把每个表对应的所有column_name存为列表,方便后续计算列的交集。
  2. 生成表对组合:用cross_join生成所有表的笛卡尔积组合,覆盖每个表与自身、不同表之间的双向配对,保证最终矩阵的对称性。
  3. 统计匹配列数:通过map2_int遍历每一对列列表,用intersect提取共同列并统计长度,得到每对表的匹配列数量。
  4. 转换为矩阵格式:用pivot_wider把长格式的匹配数转为宽格式,最后将行名设置为表名,得到符合需求的矩阵。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:18:28