我有一个数据框架,包含数百种不同的投资(用"id"列表示(、现金流和市场价值。以下示例演示了我正在使用的数据:
df <- data.frame(date = c("2020-01-31", "2020-02-29", "2020-03-31", "2020-02-29", "2020-03-31", "2020-04-30", "2020-05-31"),
id = c("alpha", "alpha", "alpha", "bravo", "bravo", "bravo", "bravo"),
cashflow = c(-100,20,4,-50,8,12,8),
market_value = c(100,90,80,50,110,120,115))
我最终想计算每项投资的内部收益率。然而,在我这样做之前,我只需要将最后一个市场价值数字添加到相应的现金流中。在此之前,我不在乎任何市场价值。在这种情况下;α";投资必须是84(即80市场价值+4现金流(;bravo";投资必须是123(即115市值+8现金流(。
期望输出:
id | 现金流 |
---|---|
阿尔法 | -100 |
阿尔法 | 20 |
阿尔法 | 84 |
bravo | -50 |
bravo | 8 |
bravo | 12 |
bravo | 123 |
我不太确定你想要什么样的最终输出,但下面是你如何获得最后一个。
df %>%
mutate(total = cashflow + market_value) %>%
group_by(id) %>%
slice_max(order_by = date) %>%
ungroup()
#> # A tibble: 2 × 5
#> date id cashflow market_value total
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 2020-03-31 alpha 4 80 84
#> 2 2020-05-31 bravo 8 115 123
创建于2022-07-22由reprex包(v2.0.1(
编辑-刚刚看到我认为你想要的输出,怎么样?
df %>%
group_by(id) %>%
mutate(
cashflow = if_else(row_number() == n(), cashflow + market_value, cashflow)
)
#> # A tibble: 7 × 4
#> # Groups: id [2]
#> date id cashflow market_value
#> <chr> <chr> <dbl> <dbl>
#> 1 2020-01-31 alpha -100 100
#> 2 2020-02-29 alpha 20 90
#> 3 2020-03-31 alpha 84 80
#> 4 2020-02-29 bravo -50 50
#> 5 2020-03-31 bravo 8 110
#> 6 2020-04-30 bravo 12 120
#> 7 2020-05-31 bravo 123 115
创建于2022-07-22由reprex包(v2.0.1(