随时间绘制 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
我正在尝试计算数据框中几家公司随时间推移的 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