簡體   English   中英

為什么melt (reshape2) 用列順序號替換列名?

[英]Why does melt (reshape2) substitute column names by column order numbers?

我有一個 74x74 的 SNP 差異成對距離矩陣,其中第一列和第一行對應於分離株的編號,如下所示:

        26482RR 25638   26230   25689RR 25954
26482RR 0       8       0       6       0
25638   8       0       8       14      8
26230   0       8       0       6       0
25689RR 6       14      6       0       6
25954   0       8       0       6       0

M = structure(c(0L, 8L, 0L, 6L, 0L, 8L, 0L, 8L, 14L, 8L, 0L, 8L, 
0L, 6L, 0L, 6L, 14L, 6L, 0L, 6L, 0L, 8L, 0L, 6L, 0L), .Dim = c(5L, 
5L), .Dimnames = list(c("26482RR", "25638", "26230", "25689RR", 
"25954"), c("26482RR", "25638", "26230", "25689RR", "25954")))

我想將此矩陣轉換為每對分離株的 SNP 差異表,如下所示:

Col      Row    SNP differences
26482RR  25638   8
26482RR  26230   0
26482RR  25689RR 6
26482RR  25954   0
25638    26230   8
25638    25689RR 14
25638    25954   8
...

為了繪制此數據並將其與其他矩陣相關聯。 我是 R 的初學者,所以經過一番搜索后,我決定應用以下代碼:

st1076 <- read.csv("st1076.csv", header=TRUE, sep=";")
m1 <- as.matrix(st1076)
m1 <- m1[upper.tri(m1)] <- NA
m1_melted <- reshape2:::melt.matrix(m1, na.rm = TRUE)
colnames(m1_melted) <- c("Col","Row","SNP differences")

但是,使用此代碼,我在“Col”中按其出現順序(1、2、3、4...)獲得了每個分離株的編號,而不是各自的分離株編號:

Col     Row      SNP differences
2       X26482RR  8
3       X26482RR  0
4       X26482RR  6

從我在其他相關問題中看到的,使用melt.matrix應該可以解決這個問題,但它對我不起作用。

誰能幫我理解為什么會這樣? 您對如何克服它有什么建議嗎?

除了從 csv 讀取之外,我認為您的代碼是正確的。 由於 csvs 被 read.csv 解釋為數據幀, read.csv需要進行一些處理才能獲得矩陣:

DF = read.csv("st1076.csv", sep=";", row.names=1, check.names=FALSE)
M = as.matrix(DF)

res <- reshape2::melt(replace(M, upper.tri(M), NA), 
  varnames = c("Col", "Row"), 
  value.name = "SNP differences", 
  na.rm = TRUE
)

head(res)
      Col     Row SNP differences
1 26482RR 26482RR               0
2   25638 26482RR               8
3   26230 26482RR               0
4 25689RR 26482RR               6
5   25954 26482RR               0
6   25692 26482RR               2

作為參考,我從這個線程開始https://stat.ethz.ch/pipermail/r-help/2010-May/237835.html然后查閱了幫助文件?read.csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM