请帮忙!
我有一个大矩阵,我想重新排列数据(或者我应该称之为 martix 的解构吗?)
M1 M2 M3 M4
L1 "AA" "--" "GG" "CC"
L2 "AG" "CC" "--" "AA"
L3 "GG" "CG" "TT" "TT"
L4 "--" "GG" "CC" "TT"
L5 "AA" "--" "AA" "CC"
L6 "AT" "CC" "CT" "AA"
L7 "TT" "CG" "TA" "CC"
示例数据为
test <- matrix(c("AA", "AG", "GG", "--","AA", "AT", "TT", "--","CC", "CG", "GG", "--","CC", "CG", "GG", "--","TT","CC","AA","CT","TA","CC","AA","TT","TT","CC","AA","CC"),nrow=7)
row.names(test)= c("L1", "L2", "L3", "L4", "L5", "L6", "L7")
colnames(test)= c("M1", "M2", "M3", "M4")
我需要重新排列并获取以下格式的数据
Line Marker testx
L1 M1 AA
L1 M2 --
L1 M3 GG
L1 M4 CC
L2 M1 AG
L2 M2 CC
L2 M3 --
L2 M4 AA
L3 M1 GG
L3 M2 CG
L3 M3 TT
L3 M4 TT
.
.
.
虽然我有一个冗长的解决方案(见下文),但在处理大型数据集时很难。请帮助我!
testx<-c(test)
testx1<-data.frame(testx)
testx2<-cbind(Line = c("L1","L2","L3","L4","L5","L6","L7"), testx1)
testx3<-testx2[order(testx2$Line),]
testx4<-cbind(Marker = c("M1","M2","M3","M4"), testx3)
testx5 <- testx4[,c("Line", "Marker", "testx")]
最佳答案
我能想到的最简单的方法是使用“reshape2”中的melt
:
library(reshape2)
melt(test)
# Var1 Var2 value
# 1 L1 M1 AA
# 2 L2 M1 AG
# 3 L3 M1 GG
# 4 L4 M1 --
# 5 L5 M1 AA
## <<SNIP>>
# 23 L2 M4 AA
# 24 L3 M4 TT
# 25 L4 M4 TT
# 26 L5 M4 CC
# 27 L6 M4 AA
# 28 L7 M4 CC
从那里,只需使用 order
即可获取“Var1”和“Var2”所需的顺序。
关于r - 解构矩阵/重新排列矩阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24655653/