我有一个如下数据框,其值需要排序。
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
不仅要将最大的Value
移到顶部,还需要像Value
{{1} }在新旧Value
中,{}总是低于a
1
。
答案 0 :(得分:0)
定义一个函数,该函数采用一个向量并将其向上移动,将最大值移到顶部,然后将最大值之前的值移到底部。使用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))
给予
Name Bin Value
1 a 1 1000
2 a 2 1
3 a 3 100
4 a 4 10
5 b 1 2000
6 b 2 20
7 b 3 2
8 b 4 200
可复制形式的输入:
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)