Abaixo está um exemplo reproduzível com um dataframe de teste:
dat<- structure(list(A = c(1.3, 1.5, 1.6, 1.2, 1.1, 1.2),
B = c(0.25, 0.21, 0.21, 0.15, 0.26, 0.17)),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA, -6L))
Quero adicionar uma coluna com um valor inicial, digamos 1000, e então usar accumulate
, mas dependendo de uma condição na coluna A.
Basicamente, se o valor na coluna A for superior ou igual a 1,2; Coluna C = 1000-(Coluna B * 1000). Mas isso é apenas para a primeira linha. Para o resto, em vez de 1000 (valor inicial), deve ser o valor anterior.
Minha saída desejada seria algo como isto:
UM | B | C |
---|---|---|
1.3 | 0,25 | 750 |
1.5 | 0,21 | 592,5 |
1.6 | 0,21 | 468.075 |
1.2 | 0,15 | 397.864 |
1.1 | 0,26 | 397.864 |
1.2 | 0,17 | 330.227 |
(e assim a primeira linha deve ser 1000 se a coluna A for inferior a 1,2).
Tentei usar accumulate
, mas não consigo fazer a parte condicional funcionar:
dat<-dat %>%
mutate(C = accumulate(tail(B,-1), .f = ~ .x - (.x * .y), .init = 1000))
Se você gostaria de usar
accumulate
Com a base R, você pode fazer o mesmo se usar
Reduce
oucumprod
ou
o que dá
dados
Criado em 2025-02-10 com reprex v2.1.1