Создание новой метки и вычисление соответствующего значения в существующих столбцах с использованием dplyr - PullRequest
0 голосов
/ 09 декабря 2018

Я хотел бы создать новую метку в существующем столбце (например, столбец 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))

Я также не уверен, как вызвать метрику.В приведенном выше коде используется значение предыдущей строки, но это не всегда так.

Желаемый результат будет выглядеть примерно так:

Example

Спасибо!

1 Ответ

0 голосов
/ 09 декабря 2018

Мы можем summarise на date и рассчитать отношение value в «Прибыль» к этому в «Доходе» и привязать строки к исходному фрейму данных.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...