【发布时间】:2023-03-13 18:19:01
【问题描述】:
我想按顺序确定未排序向量的元素索引(例如从最低到最高)
示例
vec <- c(14, 50, 10, 41, 9)
return_indices(vec)
5 3 1 4 2
我怀疑有一种简单的方法可以实现这一点,但我想不出如何
【问题讨论】:
标签: r
我想按顺序确定未排序向量的元素索引(例如从最低到最高)
vec <- c(14, 50, 10, 41, 9)
return_indices(vec)
5 3 1 4 2
我怀疑有一种简单的方法可以实现这一点,但我想不出如何
【问题讨论】:
标签: r
使用order 函数
vec <- c(14, 50, 10, 41, 9)
order(vec)
> order(vec)
[1] 5 3 1 4 2
【讨论】:
vec 中存在重复时的行为差异。 IE。 vec <- 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。根据用例的细微差别
match 将返回它匹配的第一个元素。对我来说,一个常见的用例是想要重新排列 y 的值,具体取决于 x 是如何通过排序重新排序的。这在绘制一系列 (x,y) 对之间的线时很有用。 order 解决方案将保留正确的 y,match 则不会。
color 变量here 进行排序,使其与另一个变量sep_mean 的顺序匹配)。在这样的用途中,match 方法效果最好,因为它不允许在恰好具有很多相同值的图中以不太极端的颜色显示极端值。感谢您的回答和讨论,我一定会根据用例保留这两种方法
可能使用sort 和match:
match(sort(vec), vec)
#[1] 5 3 1 4 2
【讨论】: