R找到矢量的顺序

时间:2015-03-23 15:35:42

标签: r sorting

我有这两个载体:

x=c('a','c','b','b','c','a','d','d')
y=c(1, 4, 2, 4, 5, 9, 3, 3)

我希望x的顺序基于y的值,以便x中的每个组按照y中的最小值排序。此外,在每个小组abcd中,我希望订单取决于y的升序值。

例如,每组的排序结果是:

x |a a b b d d c c
y |1 9 2 4 3 3 4 5

因此输出必须是:

output = c(1, 7, 3, 4, 8, 2, 5, 6)

我尝试使用ave,但无法将两者结合使用:

> ave(y, x, FUN=function(u) rank(u, ties.method='first'))
[1] 1 1 1 2 2 2 1 2
> ave(y, x, FUN=min)
[1] 1 4 2 2 4 1 3 3

1 个答案:

答案 0 :(得分:2)

您尝试先按分组y最小值,然后按y值本身进行排序,因此您应将这些作为order函数的第一个和第二个参数传递:

ordering <- order(ave(y, x, FUN=min), y)
x[ordering]
# [1] "a" "a" "b" "b" "d" "d" "c" "c"
y[ordering]
# [1] 1 9 2 4 3 3 4 5