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

时间:2018-01-03 10:27:47

标签: r

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

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

orderdate / orderhour / deliverydate / deliveryhour / 订单 / 新栏目:总和

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

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

有人可以帮帮我吗?

提前致谢!

1 个答案:

答案 0 :(得分: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