r - 解构矩阵/重新排列矩阵列

标签 r matrix rows reshape

请帮忙!

我有一个大矩阵,我想重新排列数据(或者我应该称之为 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/

相关文章:

r - "replace"函数示例

Jquery通过读取html内容拆分列

c++ - 寻找总和最大的子矩阵

python - 从 NumPy 数组中删除只有 "nan"值的列

c# - 有没有办法根据行号获取列值?

excel - 在 Excel 中的所有行或某些行中添加一些单词?

r - 使用对数刻度时具有难看边距的散点图

r - 使用 "1"链接两个数据帧并提取相应的值

xml - 在 R 中抓取受密码保护的网站

c - C 中的段错误和矩阵问题