我有这两个载体:
x=c('a','c','b','b','c','a','d','d')
y=c(1, 4, 2, 4, 5, 9, 3, 3)
我希望x
的顺序基于y
的值,以便x
中的每个组按照y
中的最小值排序。此外,在每个小组a
,b
,c
,d
中,我希望订单取决于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
答案 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