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

如何创建仅包含大于0数值的correlation matrix子集?

提取相关矩阵中仅含大于0数值的子集(R实现)

初始代码(带中文注释)

set.seed(123) # 设置随机种子,确保结果可复现
data <- matrix(runif(100, min = 0, max = 1), nrow = 10) # 生成10×10的0-1随机数矩阵
data[, 1] <- 0   # 将第1列全部设为0
data[, 5] <- 0   # 将第5列全部设为0
data[, 7] <- 0   # 将第7列全部设为0
data[, 8] <- 0   # 将第8列全部设为0
df <- as.data.frame(data) # 转换为数据框格式
correlation_matrix <- cor(df) # 计算变量间的相关系数矩阵
correlation_matrix <- (correlation_matrix + 1) / 2 # 将相关系数归一化到0-1区间
correlation_matrix[is.na(correlation_matrix)] <- 0 # 将矩阵中的NA值替换为0

提取仅大于0数值的两种常用方式

方式1:保留原矩阵结构,仅保留符合条件的值

这种方法会维持矩阵的行列结构,仅将不满足>0条件的数值替换为NA,适合需要保留矩阵维度的场景:

# 创建仅含大于0值的矩阵子集(其余位置设为NA)
corr_subset_matrix <- correlation_matrix
corr_subset_matrix[corr_subset_matrix <= 0] <- NA

方式2:提取所有符合条件的数值及其行列位置(转为数据框)

如果需要单独提取所有大于0的数值,并保留它们对应的行列变量名称,可以转换为长格式数据框,方便后续分析或统计:

方法一:使用tidyverse工具包
# 先安装包(首次使用时执行)
# install.packages("tidyverse")
library(tidyverse)

# 转换为长格式并筛选大于0的数值
corr_subset_long <- correlation_matrix %>%
  as.data.frame() %>%
  rownames_to_column(var = "行变量") %>%
  pivot_longer(cols = -行变量, names_to = "列变量", values_to = "相关系数") %>%
  filter(相关系数 > 0)
方法二:使用基础R实现(无需额外包)
# 获取所有大于0的数值的位置索引
corr_indices <- which(correlation_matrix > 0, arr.ind = TRUE)
# 提取对应位置的数值
corr_values <- correlation_matrix[corr_indices]
# 组合成数据框
corr_subset_df <- data.frame(
  行变量 = rownames(correlation_matrix)[corr_indices[,1]],
  列变量 = colnames(correlation_matrix)[corr_indices[,2]],
  相关系数 = corr_values
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:15