【发布时间】:2014-07-09 13:56:09
【问题描述】:
请帮忙!
我有一个大矩阵,我想重新排列数据(或者我应该称之为矩阵解构?)
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")]
【问题讨论】:
-
这种情况下的经典方法是
as.data.frame(as.table(test))。还请查看xtabs,因为它非常方便,当具有值的列是“数字”时,它正好相反。