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

如何用dplyr包在R中计算各组内变量间的相关性

问题描述

首先构造目标数据框:

var2 = c(rep("A",3),rep("B",3),rep("C",3),rep("D",3),rep("E",3),rep("F",3),
         rep("H",3),rep("I",3))

y2 = c(-1.23, -0.983, 1.28, -0.268, -0.46, -1.23,
            1.87, 0.416, -1.99, 0.289, 1.7, -0.455,
           -0.648, 0.376, -0.887,0.534,-0.679,-0.923,
           0.987,0.324,-0.783,-0.679,0.326,0.998);length(y2)
group2 = c(rep(1,6),rep(2,6),rep(3,6),rep(1,6))
data2 = tibble(var2,group2,y2)

数据预览:

# A tibble: 24 × 3
   var2  group2     y2
   <chr>  <dbl>  <dbl>
 1 A          1 -1.23 
 2 A          1 -0.983
 3 A          1  1.28 
 4 B          1 -0.268
 5 B          1 -0.46 
 6 B          1 -1.23 
 7 C          2  1.87 
 8 C          2  0.416
 9 C          2 -1.99 
10 D          2  0.289
11 D          2  1.7  
12 D          2 -0.455
13 E          3 -0.648
14 E          3  0.376
15 E          3 -0.887
16 F          3  0.534
17 F          3 -0.679
18 F          3 -0.923
19 H          1  0.987
20 H          1  0.324
21 H          1 -0.783
22 I          1 -0.679
23 I          1  0.326
24 I          1  0.998

需求:使用dplyr包计算每个分组内所有不同变量对的相关性,得到如下格式的结果表:

groupvar1var2value
1ABcor(A,B)
1AHcor(A,H)
1AIcor(A,I)
1BHcor(B,H)
1BIcor(B,I)
1HIcor(H,I)
2CDcor(C,D)
3EFcor(E,F)
解决方案

结合dplyr和tidyr包实现,步骤如下:

  1. 加载所需包:
library(dplyr)
library(tidyr)
  1. 执行计算代码:
result <- data2 %>%
  # 按分组拆分数据
  group_by(group2) %>%
  # 长格式转宽格式,每个var2对应一列y2值
  pivot_wider(names_from = var2, values_from = y2) %>%
  # 生成每个分组的相关性矩阵
  mutate(cor_matrix = list(cor(select(., -group2), use = "pairwise.complete.obs"))) %>%
  # 将相关性矩阵转为长格式数据
  rowwise() %>%
  mutate(cor_long = list(as.data.frame(cor_matrix) %>% rownames_to_column("var1"))) %>%
  unnest(cor_long) %>%
  # 进一步转换为var1-var2-相关系数的长格式
  pivot_longer(cols = -c(group2, var1), names_to = "var2", values_to = "value") %>%
  # 过滤自身相关和重复变量对(仅保留var1 < var2的组合)
  filter(var1 < var2) %>%
  # 调整列名和顺序
  rename(group = group2) %>%
  select(group, var1, var2, value) %>%
  ungroup()
  1. 查看结果:
print(result)

运行后即可得到符合要求的结果表,value列对应变量对的皮尔逊相关系数。若数据无缺失值,可省略cor()函数中的use = "pairwise.complete.obs"参数。


内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:45:56