Мы знаем, что mutate_at
функция из dplyr
позволяет нам изменять выбранные несколько столбцов и применять функцию к каждому из них. Мне нужно против этого. Я имею в виду, применить несколько функций к одному столбцу или применить одну и ту же функцию несколько раз к одному столбцу. Возьмите следующее reproducible example
.
> main <- structure(list(PolygonId = c(0L, 1L, 1612L, 3L, 2L, 1698L), Area = c(3.018892,
1.995702, 0.582808, 1.176975, 2.277057, 0.014854), Perimeter = c(10.6415,
8.6314, 4.8478, 6.1484, 9.2226, 0.6503), h0 = c(1000,500,700,1000,200,1200)), .Names = c("PolygonId",
"Area", "Perimeter", "h0"), row.names = c(NA, 6L), class = "data.frame")
> main
PolygonId Area Perimeter h0
1 0 3.018892 10.6415 1000
2 1 1.995702 8.6314 500
3 1612 0.582808 4.8478 700
4 3 1.176975 6.1484 1000
5 2 2.277057 9.2226 200
6 1698 0.014854 0.6503 1200
Меня интересует только столбец h0
в df main
.
Ожидаемый результат:
Поле h10
равно h0 + 10% of h0
, а h_10
равно h0 - 10% of h0
PolygonId Area Perimeter h0 h10 h20 h_10 h_20
1 0 3.018892 10.6415 1000 1100 1200 900 800
2 1 1.995702 8.6314 500 550 600 450 400
3 1612 0.582808 4.8478 700 770 840 630 560
4 3 1.176975 6.1484 1000 1100 1200 900 800
5 2 2.277057 9.2226 200 220 240 180 160
6 1698 0.014854 0.6503 1200 1320 1440 1080 960
Я бы обычно делал это ::
calcH <- function(h, pc){
h + pc / 100 * h
}
new_main <- mutate ( main,
h10 = calcH(h0, 10),
h20 = calcH(h0, 20),
h_10 = calcH(h0, -10),
h_20 = calcH(h0, -20)
)
Но это будет беспокойный и длинный код, так как я должен сделать этот расчет для 1%, 2.5%, 5%, 7.5%, 10%, 12.5%, 15%... 30%
как положительным, так и отрицательным образом.