【问题标题】:R function to return the order of sorted elements in an unordered vector?R函数返回无序向量中排序元素的顺序?
【发布时间】:2023-03-13 18:19:01
【问题描述】:

我想按顺序确定未排序向量的元素索引(例如从最低到最高)

示例

vec <- c(14, 50, 10, 41, 9)
return_indices(vec)
5 3 1 4 2 

我怀疑有一种简单的方法可以实现这一点,但我想不出如何

【问题讨论】:

    标签: r


    【解决方案1】:

    使用order 函数

    vec <- c(14, 50, 10, 41, 9)
    order(vec)
    
    > order(vec)
    [1] 5 3 1 4 2
    

    【讨论】:

    • 有趣的是注意到vec 中存在重复时的行为差异。 IE。 vec &lt;- c(14, 50, 10, 14, 41, 9); order(vec) 返回6 3 1 4 5 2。而@RonakShah 的match(sort(vec), vec) 解决方案返回6 3 1 1 5 2。根据用例的细微差别
    • @stevec 会出现差异,因为match 将返回它匹配的第一个元素。对我来说,一个常见的用例是想要重新排列 y 的值,具体取决于 x 是如何通过排序重新排序的。这在绘制一系列 (x,y) 对之间的线时很有用。 order 解决方案将保留正确的 y,match 则不会。
    • 我将它用于类似的事情(特别是对color 变量here 进行排序,使其与另一个变量sep_mean 的顺序匹配)。在这样的用途中,match 方法效果最好,因为它不允许在恰好具有很多相同值的图中以不太极端的颜色显示极端值。感谢您的回答和讨论,我一定会根据用例保留这两种方法
    【解决方案2】:

    可能使用sortmatch

    match(sort(vec), vec)
    #[1] 5 3 1 4 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多