【问题标题】:ordering matrix by vector correctly正确按向量排序矩阵
【发布时间】:2014-12-22 00:12:34
【问题描述】:

我不明白为什么我不能使用 order 函数对基于向量的矩阵进行排序

我有以下几点:

m
     [,1] [,2]
[1,]    1    5
[2,]    2    5
[3,]    3    5
[4,]    4    5
[5,]    5    5
[6,]    6    5

v
[[1]]
[1] 3 1 2 4 5 6 

当我使用时:

m[order(unlist(v)),]

我得到以下排序错误的矩阵。

     [,1] [,2]
[1,]    2    5
[2,]    3    5
[3,]    1    5
[4,]    4    5
[5,]    5    5
[6,]    6    5

当我想要的顺序是 v

     [,1] [,2]
[1,]    3    5
[2,]    1    5
[3,]    2    5
[4,]    4    5
[5,]    5    5
[6,]    6    5

你们认为为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • 嗯....m[unlist(v),]?
  • 谢谢,但我的问题是为什么你不能在这种情况下使用 order?
  • @user3141121 看看unlist(v)[order(unlist(v))]。它对向量进行排序,但 order 返回导致排序顺序的索引的排列。正如西蒙指出的那样,如果你想明确给出索引,那么不要使用order()
  • 好吧,阅读帮助页面:?order,然后试试order(unlist(v))unlist(v)[ order(unlist(v))],看看你能不能解决这个问题。

标签: r matrix vector


【解决方案1】:

代替

m[order(unlist(v)),]

试试

temp <- unlist(v)
m[ temp , ]

因为order 按您想要的顺序返回索引。例如

> x = c(3,1,2)
> order(x)
[1] 2 3 1
> x[order(x)]
[1] 1 2 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多