代码之家  ›  专栏  ›  技术社区  ›  DTYK

使用dplyr创建新标签并计算现有列中的相应值

  •  0
  • DTYK  · 技术社区  · 7 年前

    我想在现有列(例如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 回复  |  直到 7 年前
        1
  •  1
  •   Ronak Shah    7 年前

    我们可以 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
    
    推荐文章