R 通过移动行对数据帧的行进行排序,使最大值位于顶部

R 通过移动行对数据帧的行进行排序,使最大值位于顶部,r,R,我有一个如下的数据框,需要对其值进行排序 Name Bin Value a 1 10 a 2 1000 a 3 1 a 4 100 b 1 20 b 2 2 b 3 200 b 4 2000 我希望最大值位于顶部,同时保持值与其他值的相对位置,以便新的顺序如下所示 Name Bin Value a 1 1000 a 2 1 a 3 100 a 4 10 b 1 20

我有一个如下的数据框,需要对其值进行排序

Name Bin Value
a    1   10
a    2   1000
a    3   1
a    4   100
b    1   20
b    2   2
b    3   200
b    4   2000
我希望最大值位于顶部,同时保持值与其他值的相对位置,以便新的顺序如下所示

Name Bin Value
a    1   1000
a    2   1
a    3   100
a    4   10
b    1   2000
b    2   20
b    3   2
b    4   200

它不仅仅是将最大的
带到顶部,但是整个
值序列需要用最大
值进行移位,就像
a
1
在新旧
数据中总是低于
a
1000
。frame
定义一个函数,该函数取一个向量,并将其向上移动,将最大值移动到顶部,然后移动向量从最大值到底部之前的值。使用
ave
按名称将其应用于值

max2top <- function(x) {
  wx <- which.max(x) - 1
  if (wx == 0) x else c(tail(x, -wx), head(x, wx))
}
transform(DF, Value = ave(Value, Name, FUN = max2top))
注 可复制形式的输入:

Lines <- "Name Bin Value
a    1   10
a    2   1000
a    3   1
a    4   100
b    1   20
b    2   2
b    3   200
b    4   2000"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)

行感谢您的回复,但将最大
值设置到顶部并不能解决我的问题。
Name
a
值为
1000
,后跟
1
,后面跟着
100
,依此类推。所以它不仅仅是max
Value
,如果你看我的新数据框,它已经更新为向上循环旋转向量,这样最大值就位于顶部。
Lines <- "Name Bin Value
a    1   10
a    2   1000
a    3   1
a    4   100
b    1   20
b    2   2
b    3   200
b    4   2000"
DF <- read.table(text = Lines, header = TRUE, strip.white = TRUE)