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
,依此类推。所以它不仅仅是maxValue
,如果你看我的新数据框,它已经更新为向上循环旋转向量,这样最大值就位于顶部。
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)