Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么melt(重塑2)用列顺序号替换列名?_R_Matrix_Reshape2_Melt - Fatal编程技术网

R 为什么melt(重塑2)用列顺序号替换列名?

R 为什么melt(重塑2)用列顺序号替换列名?,r,matrix,reshape2,melt,R,Matrix,Reshape2,Melt,我有一个SNP差异的74x74成对距离矩阵,其中第一列和第一行对应于隔离的编号,如下所示: 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

我有一个SNP差异的74x74成对距离矩阵,其中第一列和第一行对应于隔离的编号,如下所示:

        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")
从我在其他相关问题中看到的情况来看,使用
melt.matrix
应该可以解决这个问题,但对我不起作用


有人能帮我理解为什么会这样吗?你对如何克服它有什么建议吗?

我认为你的代码是正确的,除了从csv读取。由于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
DF=read.csv(“st1076.csv”,sep=“;”,row.names=1,check.names=FALSE)
M=作为矩阵(DF)

res我无法从您的csv开始复制,但使用我在其中编辑的M(似乎与您的显示相匹配),
melt(替换(M,upper.tri(M),NA),varnames=c(“Col”,“Row”),value.name=“SNP differences”,NA.rm=TRUE)
。。?我想也许你正在以某种方式融化一个data.frame。@Frank这是我的.csv文件:(),请看一下。我检查了每个步骤的输出,但仍然无法解释问题,似乎一切正常。我之前忘记提到,但最终输出表的第一部分是:Col:1,Row:X,SNP差异:26482RR,对于前74个条目。我想我可以删除这些第一个条目,但也许它们与问题有关。好的,我想我明白了。您可以通过上面的代码确认
st1076
不是矩阵的良好表示,因为
dim(st1076)
不是74x74。我在下面展示了一种更好的阅读方法
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