【问题标题】:Ordering two matrices after a third matrix (using %in%)在第三个矩阵之后排序两个矩阵(使用 %in%)
【发布时间】: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 &lt;- 1:(columns/2); G2 &lt;- (1+columns/2):columns for (i in 1:nrow(LDC)) {
nfa &lt;- NFA.neu[i,]; ldc &lt;- LDC[i,]
o1 &lt;- order(ldc[nfa %in% ldc[G1]])
o2 &lt;- order(ldc[nfa %in% ldc[G2]]) + columns/2
o&lt;-c(o1, o2)
NFA.neu[i,]&lt;- NFA.neu[i, o]
RX.neu[i,]&lt;- RX.neu[i, o]
}
问题是在 group1 和 group2 中我的顺序错误。

正确的解决方案应该是这样的:

Solution&lt;-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&lt;-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。

标签: r sorting matrix


【解决方案1】:


NFA.neu 中的第一行按升序排列: 矩阵(c(1,3,4,5,7,9),1,1)。
然后我想分成两组:
G1:1,3,4;
G2:5,7,9

现在,我有矩阵 LDC:7,1,5,9,4,3(它包含与NFA.neu)。
在 LDC 中,1 在 4 之前,然后是 3。所以我的新订单应该在 G1 中:1,4,3。

对于第 2 组:在 LDC 中,7 在 5 之前,然后是 9。我对第 2 组的新顺序应该是 7、5、9。 如果将 G1 和 G2 结合起来,则得到:1、4、3、7、5、9 第 2-4 行需要的方法相同。

我希望它更清楚一点,感谢您的努力和帮助,
约旦

【讨论】:

  • 本文中的G1G2 向量与您第一篇文章中的组向量不同。请使用编辑按钮并修改您的第一篇文章。并且请更精确,省略不必要的内容。
猜你喜欢
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2011-02-10
  • 2018-08-31
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多