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

R语言如何用两ID列与t检验p值列生成类相关系数方形矩阵

需求

需要基于两个ID列period1、period2和对应的取值列p(t检验输出结果),生成格式和相关系数矩阵类似的方形矩阵,展示每对ID组合的p值。

示例数据
df <-
  structure(list(period1 = c("(1) Start (178)", "(1) Start (178)", 
    "(1) Start (178)", "(1) Start (178)", "(2) Mature (217)", "(2) Mature (217)", 
    "(2) Mature (217)", "(3) COVID hit (117)", "(3) COVID hit (117)", 
    "(4) After COVID (79)"), period2 = c("(2) Mature (178)", "(3) COVID hit (178)", 
    "(4) After COVID (178)", "(5) Closing (178)", "(3) COVID hit (217)", 
    "(4) After COVID (217)", "(5) Closing (217)", "(4) After COVID (117)", 
    "(5) Closing (117)", "(5) Closing (79)"), p = c("0.0000 (****)", 
    "0.0000 (****)", "0.0000 (****)", "0.0055 (**)", "0.0003 (***)", 
    "0.0727 (ns)", "0.0000 (****)", "0.2050 (ns)", "0.0000 (****)", 
    "0.0000 (****)")), row.names = c(NA, -10L), class = "data.frame")

注:原示例变量名用了和R内置转置函数重名的t,这里重命名为df避免冲突。

实现代码

基于tidyverse套件实现,逻辑为先补全双向配对和对角线占位值,再转换为宽格式矩阵:

# 加载依赖包
library(tidyverse)

# 提取所有唯一的时期名称
all_periods <- unique(c(df$period1, df$period2))

# 补全对称配对和对角线数据
full_pair_data <- bind_rows(
  df,
  # 调换period1和period2补全下三角数据
  df %>% rename(period1 = period2, period2 = period1)
) %>% 
  # 添加对角线(同一时期对比的p值填充为"-",可根据需求修改为1或其他标识)
  add_row(period1 = all_periods, period2 = all_periods, p = "-")

# 转换为方形矩阵
p_value_matrix <- full_pair_data %>% 
  pivot_wider(names_from = period2, values_from = p) %>% 
  column_to_rownames("period1") %>% 
  as.matrix()

# 打印查看结果
print(p_value_matrix)
输出说明

最终得到的p_value_matrix行、列均为所有时期ID,单元格为对应配对的t检验p值,上下三角对称,对角线为同一时期的占位标识,格式和常规相关系数矩阵完全一致,可直接用于展示或后续分析。


内容的提问来源于stack exchange,提问作者J.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:03