1

Let's say this is my dataset:

  city  | date  | cases   
--------|-------|-------
 London | Day 1 |   4
 London | Day 2 |   6
 London | Day 3 |   9
 Paris  | Day 1 |   5
 Paris  | Day 2 |   3
 Paris  | Day 3 |   7
 Madrid | Day 1 |   2
 Madrid | Day 2 |   8
 Madrid | Day 3 |   4 

What code in R programming language can I use to get from the table above to the table below? I'm pretty sure this can be done using cumsum() but what exactly do I write? Also, is there any alternative functions I can use?

  city    | date  | cases  | cumulative cases (by city) 
----------|-------|--------|------------------------
  London  | Day 1 |   4    |            4 
  London  | Day 2 |   6    |            10
  London  | Day 3 |   9    |            19
  Paris   | Day 1 |   5    |            5 
  Paris   | Day 2 |   3    |            8 
  Paris   | Day 3 |   7    |            15
  Madrid  | Day 1 |   3    |            3 
  Madrid  | Day 2 |   8    |            11
  Madrid  | Day 3 |   5    |            16

Furthermore, how can I create a cumulative column for cases arranged by date, as shown below?

  city    | date  | cases  | cumulative cases (by date) 
----------|-------|--------|------------------------
  London  | Day 1 |   4    |            4 
  Paris   | Day 1 |   5    |            9 
  Madrid  | Day 1 |   3    |            12 *
  London  | Day 2 |   6    |            6
  Paris   | Day 2 |   3    |            9 
  Madrid  | Day 2 |   8    |            17 *
  London  | Day 3 |   9    |            9
  Paris   | Day 3 |   7    |            16
  Madrid  | Day 3 |   5    |            21 *

Any help on this would be very much appreciated.

Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
kiwi
  • 565
  • 3
  • 11

1 Answers1

1

We can use group by 'city'

df1new <- df1 %>%
              group_by(city) %>%
              mutate(cum_case_by_city = cumsum(cases))

and date

df1new <- df1 %>%
             arrange(date)  %>%
             group_by(date) %>%
             mutate(cum_case_by_date = cumsum(cases))

data

df1 <- structure(list(city = c("London", "London", "London", "Paris", 
"Paris", "Paris", "Madrid", "Madrid", "Madrid"), date = c("Day 1", 
"Day 2", "Day 3", "Day 1", "Day 2", "Day 3", "Day 1", "Day 2", 
"Day 3"), cases = c(4L, 6L, 9L, 5L, 3L, 7L, 2L, 8L, 4L)), 
class = "data.frame", row.names = c(NA, 
-9L))
akrun
  • 874,273
  • 37
  • 540
  • 662