随时间绘制 financial/investment 个值

Plotting financial/investment values over time

我正在尝试计算数据框中几家公司随时间推移的 TPVI [(当前值+股息)/投资]。

我的数据框看起来像这样(本例中的日期不准确)

Company Date Metric Value
Company1 11-15-2015 invested 100
Company1 11-15-2015 current value 120
Company1 11-15-2015 dividends 5
Company2 11-15-2015 invested 200
Company2 11-15-2015 current value 120
Company2 11-15-2015 dividends 30
... ... ... ...

我正在尝试将这些值排序到一个新的数据框中,如下所示:

Company Date TVPI
Company1 ... ...
Company1 ... ...
Company1 ... ...
Company1 ... ...
Company2 ... ...
Company2 ... ...
Company2 ... ...

即每个唯一的 company/date 配对都有一个新的 TVPI 行。

我试过了

df %>% group_by(Date, Metric) %>% summarize()

但我不确定如何确定要总结的正确值(在示例数据框中,第一个 tpvi 将是 (120+5)/100。因为每个 company/date 配对都有三个“值”为了跟踪,我不知道如何在 summarize 函数中表达这个的语法。感谢任何帮助。

轻松地对不同的 Metric 进行计算的一种方法是拳头 tidyr::pivot_wider() 所以它们每个都是一个单独的列,然后使用您的公式创建一个新列 dplyr::mutate().如果您还提供 .keep = "unused"mutate(),它将只留下您在所需输出中指定的列。此外,我将您的 Date 列转换为实际的 date 格式,而不是 character,这将使它在图中作为 x 轴值表现得更好。然后就可以直接进入绘图了。该示例非常无聊,因为您只为每个 Company 提供了一个 Date,但这显示了总体思路。

library(tidyverse)

d <- structure(list(Company = c("Company1", "Company1", "Company1", "Company2", "Company2", "Company2"), Date = c("11-15-2015", "11-15-2015", "11-15-2015", "11-15-2015", "11-15-2015", "11-15-2015"), Metric = c("invested", "current value", "dividends", "invested", "current value", "dividends"), Value = c(100L, 120L, 5L, 200L, 120L, 30L)), class = "data.frame", row.names = c(NA, -6L))

d %>% 
  pivot_wider(names_from = Metric, values_from = Value) %>% 
  mutate(TPVI = (`current value` + dividends)/invested, .keep = "unused",
         Date = as.Date(Date, format = "%m-%d-%Y")) %>% 
  ggplot(aes(Date, TPVI, color = Company)) +
  geom_point() +
  geom_line()

reprex package (v2.0.1)

创建于 2022-02-21