有没有办法将 DataFrame/correlation 矩阵转换为每个单元格组合一列的 DataFrame?

Is there a way to turn a DataFrame/correlation matrix into a DataFrame with one column per cell combination?

我有一个 89x89 的数据框,我已使用 cor() 将其转换为相关矩阵。我的问题是,是否有一种方法可以将每个 column-row 对变成一个新的 data.frame 中它自己的列,该列将有一行和 row-column 对的所有可能组合,每个都是自己的柱子。例如:

    [1] [2] [3] [4] [5]
[1]  a   b   c   d   e
[2]  f   a   g   h   i
[3]  j   k   a   l   m
[4]  n   o   p   a   q
[5]  r   s   t   u   a

会变成

[1][1] [1][2] [1][3] [1][4] [1][5] [2][1] [2][2] [2][3] [2][4] 
   a      f      j      n      r      b      a      k     o

以此类推整个矩阵,[1][1] 是第一列 header 以此类推。

到目前为止,我还没有找到解决这个问题的方法。我找到了将每个条目变成 DataFrame 中它自己的行的解决方案,例如

     col1 col2 col3
row1 [1]   [1]   a
row2 [1]   [2]   f
row3 [1]   [3]   j

这不是我要找的。

希望我忽略了一个简单的解决方案。感谢您的帮助!

包含 [] 的列名有问题,因此我使用了与您的略有不同的命名约定,但我相信这会为您提供所需的结构。

先生成一些测试数据

library(tidyverse)

d <- tibble(
       a=c(1, 0.2, 0.4, 0.6),
       b=c(0.2, 1, 0.2, 0.4),
       c=c(0.4, 0.2, 1, 0.2),
       d=c(0.6, 0.4, 0.2, 1)
     )
d
# A tibble: 4 × 4
      a     b     c     d
  <dbl> <dbl> <dbl> <dbl>
1   1     0.2   0.4   0.6
2   0.2   1     0.2   0.4
3   0.4   0.2   1     0.2
4   0.6   0.4   0.2   1  

然后做你想做的事

d %>% 
  mutate(row=letters[1:nrow(.)]) %>% 
  pivot_longer(-row) %>% 
  pivot_wider(
    names_from=c(row, name),
    values_from=value
  )
    a_a   a_b   a_c   a_d   b_a   b_b   b_c   b_d   c_a   c_b   c_c   c_d   d_a   d_b   d_c   d_d
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1     1   0.2   0.4   0.6   0.2     1   0.2   0.4   0.4   0.2     1   0.2   0.6   0.4   0.2     1

编辑

d %>% 
  mutate(row=letters[1:nrow(.)]) %>% 
  pivot_wider(
    names_from=row,
    values_from=-row
  )

给出相同的结果,但稍短。