有没有办法将 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
)
给出相同的结果,但稍短。
我有一个 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
)
给出相同的结果,但稍短。