У меня есть набор данных, подобный следующему:
a <- structure(list(CSECT = c("001-01", "001-02", "001-03", "001-04", "001-05", "001-06", "001-07", "001-08", "001-09", "001-10"),
Ht = c(0.341, 0.1244, 0.3, 0.143, 1.265, 0.143, 0.553, 0.132, 2.221, 1.444),
Ln= c(11, 351, 454, 15, 1446, 138, 9442, 354, 354, 4566)),
.Names = c("CSECT", "Ht", "Ln"), row.names = c(NA, -10L), class = "data.frame")
a$Pr0 <- round(exp(0.1*a$Ht^0.1*a$Ln^0.05),3)
a
CSECT Ht Ln Pr0
1 001-01 0.3410 11 1.107
2 001-02 0.1244 351 1.115
3 001-03 0.3000 454 1.128
4 001-04 0.1430 15 1.099
5 001-05 1.2650 1446 1.159
6 001-06 0.1430 138 1.111
7 001-07 0.5530 9442 1.161
8 001-08 0.1320 354 1.116
9 001-09 2.2210 354 1.156
10 001-10 1.4440 4566 1.171
Я хочу ранжировать строки на основе Pred0
[ties.method=min
].
ab1 <- a %>%
mutate(rank0 = rank(desc(Pr0), ties.method="min"))
ab1
CSECT Ht Ln Pr0 rank0
1 001-01 0.3410 11 1.107 9
2 001-02 0.1244 351 1.115 7
3 001-03 0.3000 454 1.128 5
4 001-04 0.1430 15 1.099 10
5 001-05 1.2650 1446 1.159 3
6 001-06 0.1430 138 1.111 8
7 001-07 0.5530 9442 1.161 2
8 001-08 0.1320 354 1.116 6
9 001-09 2.2210 354 1.156 4
10 001-10 1.4440 4566 1.171 1
Я хочу перестроить строки, основываясь на новом значении прогнозирования, названном Pr30
, которое является всего лишь 30% -ым увеличением Ln
, то есть round(exp(0.1*a$Ht^0.1*((a$Ln)*1.30)^0.05),3)
.Мне нравится получать новое ранжирование, основанное на измененном значении этой строки, оставляя все остальные строки неизменными (т.е. сохраняя то же самое, что и оригинал).Например, для строки 2 значение Pr30
будет равно 1,117, его ранжирование будет равно 6 (значение rank30
) вместо 7 (значение rank0
) по сравнению с остальными значениями Pr0
.Вот два примера:
Row1: round(exp(0.1*0.3410 ^0.1*(11*1.30)^0.05),3)=1.108
;Так как только этот ряд займет 30% прироста, остальные такие же.Значения Pr
будут выглядеть следующим образом (1.108
, 1.115, 1.128, 1.099, 1.159, 1.111, 1.161, 1.116, 1.156, 1.171).Нужно применить ранговую функцию.Для row1
это все равно 9.
Row2: round(exp(0.1*0.1244 ^0.1*(351*1.30)^0.05),3)=1.117
;Так как только этот ряд займет 30% прироста, остальные такие же.Значения Pr
будут выглядеть следующим образом (1.107, 1.117
, 1.128, 1.099, 1.159, 1.111, 1.161, 1.116, 1.156, 1.171).Нужно применить ранговую функцию.Для row2
ранг стал 6.
Аналогичное произойдет для всех строк.Окончательные значения будут выглядеть следующим образом:
CSECT Ht Ln Pr0 rank0 rank30
1 001-01 0.3410 11 1.107 9 9
2 001-02 0.1244 351 1.115 7 6
3 001-03 0.3000 454 1.128 5 5
4 001-04 0.1430 15 1.099 10 10
5 001-05 1.2650 1446 1.159 3 2
6 001-06 0.1430 138 1.111 8 8
7 001-07 0.5530 9442 1.161 2 2
8 001-08 0.1320 354 1.116 6 6
9 001-09 2.2210 354 1.156 4 3
10 001-10 1.4440 4566 1.171 1 1
Поддержка Таблица Google .