我想在现有列(例如A列)中创建一个新标签,并在另一个现有列(例如B列)的同一行中创建一个计算值。
模拟数据如下:
df <- data.frame(date = as.Date(c("31-Dec-2018", "31-Dec-2018", "31-Dec-2018", "30-Sep-2018", "30-Sep-2018", "30-Jun-2018", "30-Jun-2018",
"31-Mar-2018", "31-Mar-2018"), format = "%d-%b-%Y"),
metric = c("Revenue", "Profit", "Restructuring Cost", "Revenue", "Profit", "Revenue", "Profit", "Revenue", "Profit"),
value = c(100, 50, 10, 100, 50, 90, 44, 97, 60))
共有三列(日期,财务指标以及该特定日期的财务指标的相应值)。例如,我想计算每个日期的净利润率(特定日期的利润除以同一日期的收入)。但是,mutate
做错了。它创建一个新的计算列。我希望在现有的“指标”列中创建“净利润”标签,并在“值”列中创建相应的净利润值。
到目前为止,我所做的是(错误的)以下内容:
test <- df %>%
group_by(date) %>%
mutate(net_margin = round(value/lag(value), digits = 2))
我也不确定如何调用该指标。我上面的代码使用的是上一行的值,但并非总是如此。
所需的输出如下所示:
谢谢!
答案 0 :(得分:1)
我们可以用summarise
date
乘以{Profit”处的value
来计算“ Revenue”处的比率,并将行绑定到原始数据帧。
library(dplyr)
df %>%
group_by(date) %>%
summarise(value = round(value[metric == "Profit"]/value[metric == "Revenue"], 2),
metric = "Net Margin") %>%
bind_rows(df) %>%
arrange(date)
# date value metric
# <date> <dbl> <chr>
# 1 2018-03-31 0.62 Net Margin
# 2 2018-03-31 97 Revenue
# 3 2018-03-31 60 Profit
# 4 2018-06-30 0.49 Net Margin
# 5 2018-06-30 90 Revenue
# 6 2018-06-30 44 Profit
# 7 2018-09-30 0.5 Net Margin
# 8 2018-09-30 100 Revenue
# 9 2018-09-30 50 Profit
#10 2018-12-31 0.5 Net Margin
#11 2018-12-31 100 Revenue
#12 2018-12-31 50 Profit
#13 2018-12-31 10 Restructuring Cost