r-如何只将一个向量的最后一个元素添加到另一个向量上



我有一个数据框架,包含数百种不同的投资(用"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
bravo8
bravo12
bravo123

我不太确定你想要什么样的最终输出,但下面是你如何获得最后一个。

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(

最新更新