【发布时间】:2016-08-01 09:48:43
【问题描述】:
我有三个因子/矩阵(NFA、RX 和 LDC)。首先,我想对 NFA 中的每一行进行升序排序,并且 RX 应该以与 NFA 相同的方式排序。这行得通。但后来我想将因子 NFA 分成两组(G1 和 G2)。在第三因素 LDC 的方案之后,这两个组都应该是新的(单独的)排序。我的代码给了我一个错误的排序,但我不知道为什么。
数据
NFA<-matrix(c(4,9,5,3,1,7, 12,51,15,6,9,3, 9,5,1,11,3,8, 5,9,7,18,21,17),4,6,byrow=TRUE)
RX<-matrix(c(1,3,7,1,5,4, 6,12,3,8,3,5, 4,4,5,34,8,2, 5,7,11,5,13,17),4,6,byrow=TRUE)
LDC<-matrix(c(7,1,5,9,4,3, 12,51,6,3,9,15, 8,3,11,1,5,9, 9,5,7,18,17,21),4,6,byrow=TRUE)
columns <- ncol(NFA)
第一次排序:
C<-t(apply(NFA, 1, order))
NFA.neu <- matrix(NFA[cbind(c(row(NFA)), c(C))], ,columns)
RX.neu <- matrix( RX[cbind(c(row(NFA)), c(C))], ,columns)
按照 LDC 的方案对每个组进行排序
G1 <- 1:(columns/2); G2 <- (1+columns/2):columns
for (i in 1:nrow(LDC)) {nfa <- NFA.neu[i,]; ldc <- LDC[i,]o1 <- order(ldc[nfa %in% ldc[G1]])o2 <- order(ldc[nfa %in% ldc[G2]]) + columns/2o<-c(o1, o2)NFA.neu[i,]<- NFA.neu[i, o]RX.neu[i,]<- RX.neu[i, o]}
问题是在 group1 和 group2 中我的顺序错误。
正确的解决方案应该是这样的:
Solution<-matrix(c(1,4,3,7,5,9, 6,3,9,12,51,15, 3,1,5,8,11,9, 9,5,7,18,17,21),4,6,byrow=T)
也许有人对我有提示?我不知道我的错误在哪里。
提前谢谢你,
约旦
【问题讨论】:
-
我不完全理解您的问题和您的解决方案数据框,但您使用每组排序获得类似的 C 矩阵,方法如下:
apply(LDC, 1, function(x,y) order(y,x), c(rep(1,3),rep(2,3)))。您添加 (rbind) 分组行并按此和目标行排序。 -
感谢您的提示。我的主要问题是我的代码中 o1 和 o2 的排序。在这里,我想在 LDC 中的序列之后对矩阵“NFA.neu”的每一行进行排序。但是我的排序不是按照LDC的顺序,不知道为什么。
-
好的,但是你确定你提供的
Solution矩阵是正确的吗? -
哦,不,我的解决方案矩阵有误。对此感到抱歉。我很迷惑。正确的解决方案应该是
Solution<-matrix(c(1,4,3,7,5,9, 6,3,9,12,51,15, 3,1,5,8,11,9, 9,5,7,18,17,21),4,6,byrow=T)。现在,代码在两组中都给出了正确的数字,但是组内的排序是错误的。 -
排序后的第一行 NEU 是 1,3,4,5,7,9。您想演示如何根据 LDC 7、1、5、9、4、3 的第一行对其进行排序吗?我不知道你怎么能到达 1,4,3,7,5,9。