Как выполнить процентное увеличение столбца при превышении указанного значения

#r

#r

Вопрос:

Как можно ввести процентное увеличение столбца после превышения заданного значения в этом столбце?

Вот фрейм данных:

 a <- data.frame(id = c(1,1,1,1,1,1,1,1,1), num = c(1,1.3,1.6,1.7,1.9,2.1,2.4,2.5,3.5))
 

Для порогового значения 2 для столбца num и процентного увеличения на 1% будет выглядеть следующим образом:

 id  num    adjusted
1   1.0    1.0
1   1.3    1.3
1   1.6    1.6
1   1.7    1.7
1   1.9    1.9
1   2.1    2.1
1   2.4    2.121
1   2.5    2.14221
1   3.5    2.1636321
 

Любая помощь будет высоко оценена

Ответ №1:

Работает ли это:

 library(dplyr)
library(purrr)
a %>% filter(num > 2) %>% mutate(adjusted = accumulate(num, ~ .x * 1.01)) %>% 
right_join(a) %>% mutate(adjusted = coalesce(adjusted, num)) %>% arrange(num)
Joining, by = c("id", "num")
  id num adjusted
1  1 1.0 1.000000
2  1 1.3 1.300000
3  1 1.6 1.600000
4  1 1.7 1.700000
5  1 1.9 1.900000
6  1 2.1 2.100000
7  1 2.4 2.121000
8  1 2.5 2.142210
9  1 3.5 2.163632
 

Ответ №2:

 thresh <- 2
pct_inc <- .01

# filter to numbers which will be changed
to_adj <- a$num[a$num > thresh]

# replace numbers above thresh with pct increase from first above thresh
a$adjusted <- 
  replace(a$num, a$num > thresh, 
         to_adj[1]*(1   pct_inc)^(seq_along(to_adj) - 1))

a
#   id num adjusted
# 1  1 1.0 1.000000
# 2  1 1.3 1.300000
# 3  1 1.6 1.600000
# 4  1 1.7 1.700000
# 5  1 1.9 1.900000
# 6  1 2.1 2.100000
# 7  1 2.4 2.121000
# 8  1 2.5 2.142210
# 9  1 3.5 2.163632