【问题标题】:R - sort function changes the matrixR - 排序函数改变矩阵
【发布时间】:2017-09-04 09:47:14
【问题描述】:

我想根据其他列的行和的排名对矩阵的列进行排序。所以我使用这个代码:

for(j in 1:d) {
    X[,j]=sort(X[,j],decreasing=TRUE)[rank(rowSums(X[,c(1:d)[-j]]))]
}

但是这段代码改变了列的值,我只是想重新排列。 当行和相等时,第 j 列的值也变得相等,尽管在原始列中每个值只有一次。一个例子:

example

如何避免这个问题?

谢谢

【问题讨论】:

  • 您可能需要在 rank 语句的末尾添加一个逗号 - 就目前而言,您只是在一维中进行索引,这意味着 R 将其作为向量进行排序。
  • 这在我的示例中不起作用。但它是否应该作为向量排序?
  • 您知道您在每一步都独立地重新排序列,然后使用修改后的矩阵来计算新的排名?我想您可能正在寻找for(j in 1:d) { X[,j]=X[order(rowSums(X[,c(1:d)[-j]]),decreasing=TRUE),j] },但我不确定您要实现什么目标。使用可重现的示例和预期的输出会更容易

标签: r sorting ranking


【解决方案1】:

希望这会有所帮助!

#sample data
x <- matrix(c(1,1,1,2,2,2,3,3,3), nrow=3, ncol=3, byrow=T)

#if you want to sort by row-sum of 2nd & 3rd column
x[order(rowSums(x[,-1]), decreasing = T),]
#if you want to sort by row-sum of 1st & 2nd column
x[order(rowSums(x[,-3]), decreasing = T),]

所以最后的循环可能是

x <- matrix(c(1,1,1,2,2,2,3,3,3), nrow=3, ncol=3,byrow=T)
X <- x
for(j in 1:ncol(x)) {
  X[,j]=x[order(rowSums(x[,-j]), decreasing = T),j]
}

【讨论】:

    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多