gpt4 book ai didi

r - 在 R 中总结一个系列

转载 作者:行者123 更新时间:2023-12-03 18:34:00 25 4
gpt4 key购买 nike

我有一个如下所示的数据框:

id  amount  number  discount
1 400 10 0.7
2 500 5 0.7
3 600 10 0.6
df <- structure(list(id = 1:3, amount = c(400L, 500L, 600L), number = c(10L, 
5L, 10L), discount = c(0.7, 0.7, 0.6)), class = "data.frame", row.names = c(NA,
-3L))
我有一个公式,其中 N 是数据框中的数字列
enter image description here
所以对于第一行,我会总结:
400/(1+0.7)^0 + 400/(1+0.7)^1 + 400/(1+0.7)^2 +.... + 400/(1+0.7)^9
我怎么能对每一行都这样做?

最佳答案

这是否符合您想要的输出?
BaseR方法

mapply(function(x, y, z) sum(Reduce(function(.x, .y) {.x/y }, seq_len(z -1), x, accumulate = T)), 
df$amount, 1 + df$discount, df$number)
[1] 966.610 1128.764 1585.448

整理方法
df <- structure(list(id = 1:3, amount = c(400L, 500L, 600L), number = c(10L, 
5L, 10L), discount = c(0.7, 0.7, 0.6)), class = "data.frame", row.names = c(NA,
-3L))
library(tidyverse)
df %>% rowwise() %>%
mutate(calc = sum(accumulate(seq_len(number-1), .init = amount, ~ .x/(1 + discount))))
#> # A tibble: 3 x 5
#> # Rowwise:
#> id amount number discount calc
#> <int> <int> <int> <dbl> <dbl>
#> 1 1 400 10 0.7 967.
#> 2 2 500 5 0.7 1129.
#> 3 3 600 10 0.6 1585.
reprex package (v2.0.0) 于 2021-05-24 创建 accumulate 创建一个几何级数作为输出
accumulate(1:9, .init = 400, ~.x/(1 + 0.7))

[1] 400.000000 235.294118 138.408304 81.416650 47.892147 28.171851 16.571677 9.748045 5.734144 3.373026
使用 rowwisesum 将根据最终需要对几何级数求和
sum(accumulate(1:9, .init = 400, ~.x/(1 + 0.7)))
[1] 966.61

关于r - 在 R 中总结一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67670995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com