提问人:Marine Bergot 提问时间:11/3/2023 最后编辑:ThomasIsCodingMarine Bergot 更新时间:11/3/2023 访问量:52
如何将双精度矩阵转换为 DataFrame 列
how to transform double matrix into dataframe columns
问:
我正在尝试将一些方形双精度矩阵重塑为一些列数据帧
像这样:
genomeA genomeB genomeC
genomeA 1.0 0.5 0.3
genomeB 0.5 1.0 0.2
genomeC 0.3 0.2 1.0
到
Genomes1 Genomes2 Value
genomeA genomeA 1.0
genomeA genomeB 0.5
genomeA genomeC 0.3
.....
我试图将其转换为数据帧,但它没有做任何事情 我尝试了 Tibble
df <- corr %>%
as_tibble() %>%
setNames(c('GenomesA', 'GenomesB', 'AAI'))
它创造了一些奇怪的矩阵,但不是我想要的
如果有人作为我的线索!谢谢
答:
1赞
Ronak Shah
11/3/2023
#1
您可以尝试以下方法:
library(tidyverse)
corr %>%
as.data.frame() %>%
rownames_to_column(var = "Genomes1") %>%
pivot_longer(cols = -Genomes1, names_to = "Genomes2")
# Genomes1 Genomes2 value
# <chr> <chr> <dbl>
#1 genomeA genomeA -1.00
#2 genomeA genomeB -1.32
#3 genomeA genomeC 0.254
#4 genomeB genomeA 0.0600
#5 genomeB genomeB -0.0602
#6 genomeB genomeC -0.594
#7 genomeC genomeA -1.65
#8 genomeC genomeB -0.530
#9 genomeC genomeC -0.390
示例数据
corr <- structure(c(-1.00308806318708, 0.0600357248405599, -1.65288400581753,
-1.31933414605029, -0.0601936388016965, -0.529547763994527, 0.253656662526024,
-0.594415786654097, -0.390061373503094), dim = c(3L, 3L), dimnames = list(
c("genomeA", "genomeB", "genomeC"), c("genomeA", "genomeB",
"genomeC")))
3赞
Maël
11/3/2023
#2
可以使用(在 R 4.3.0 中引入):array2DF
array2DF(m)
但这会产生意想不到的后果,即输出不正确的第二列;您可以像这样补救:
array2DF(m, responseName = "AAI", simplify = FALSE) |>
transform(AAI = mapply(\(x, y) x[y], AAI, match(Var2, unique(Var2))))
# Var1 Var2 AAI
# 1 genomeA genomeA 1.0
# 2 genomeB genomeA 0.5
# 3 genomeC genomeA 0.3
# 4 genomeA genomeB 0.5
# 5 genomeB genomeB 1.0
# 6 genomeC genomeB 0.2
# 7 genomeA genomeC 0.3
# 8 genomeB genomeC 0.2
# 9 genomeC genomeC 1.0
数据
m <- read.table(h=T,text=" genomeA genomeB genomeC
genomeA 1.0 0.5 0.3
genomeB 0.5 1.0 0.2
genomeC 0.3 0.2 1.0")
评论
2赞
ThomasIsCoding
11/3/2023
array2DF
让事情变得如此简单,酷炫!我落后于最新的 R 版本:P
1赞
ThomasIsCoding
11/3/2023
在 R 版本 4.3.0 <中,我认为传统方式可能是as.data.frame.table(as.matrix(m))
1赞
Marine Bergot
11/3/2023
太棒了,非常感谢!效果真好!Tidyverse 答案也有效,但输出对 ggplot2 不利,但有了您的解决方案,它就完美了,谢谢!
评论