首页 文章

R:如果所有其他列都相同,则添加另一列和列的总和

提问于
浏览
0

我想在R中的数据框中添加另一列,包含订单数量的总和,当其他列相同时 .

例如,如果这是我的数据框:

orderdate / orderhour / deliverydate / deliveryhour / orders / New column: sum


星期三/ 12月/星期五/ 17:00 / 5 / 0
星期三/ 12月/星期五/ 17:00 / 2 / 7
星期四/ 13:00 /星期五/ 17:00 / 3 / 3
星期四/ 13:00 /星期五/ 19:00 / 1 / 1

最后一列是我要添加的列 . 最后,可以删除零为零的行,因此我不再有重复的数据 . 因此,只有所有列匹配(订单除外),才应采用订单总和 . 在其他情况下,可以保持相同的值 .

有人可以帮帮我吗?

提前致谢!

1 回答

  • 1
    # example data
    df = read.table(text = "
    orderdate/orderhour/deliverydate/deliveryhour/orders
    wednesday/12:00/Friday/17:00/5 
    wednesday/12:00/Friday/17:00/2 
    thursday/13:00/Friday/17:00/3 
    thursday/13:00/Friday/19:00/1
    ", sep="/", header=T, stringsAsFactors=F)
    
    library(dplyr)
    
    df %>%
      group_by(orderdate, orderhour, deliverydate, deliveryhour) %>% # for each combination of those variables
      mutate(sum_orders = ifelse(n() > 1 &                           # if there are multiple rows
                                 row_number() == 1,                  # and this is row 1
                                 0,                                  # use a zero
                                 cumsum(orders))) %>%                # else use the cum sum
      ungroup()                                                      # forget the grouping
    
    # # A tibble: 4 x 6
    #   orderdate orderhour deliverydate deliveryhour orders sum_orders
    #   <chr>     <chr>     <chr>        <chr>         <dbl>      <dbl>
    # 1 wednesday 12:00     Friday       17:00          5.00       0   
    # 2 wednesday 12:00     Friday       17:00          2.00       7.00
    # 3 thursday  13:00     Friday       17:00          3.00       3.00
    # 4 thursday  13:00     Friday       19:00          1.00       1.00
    

相关问题