вставьте накопленные значения между несуществующими датами: - PullRequest
0 голосов
/ 07 мая 2018

Предположим, Том разместил два заказа в понедельник и пятницу. Но я хочу найти эффективный способ вставки данных об отсутствии покупок для вт, ср, чт, которых нет в моих данных, чтобы я мог рассчитать совокупные общие расходы на каждый день для Тома.

Мой текущий код - создание массовой пользовательской даты (полная дата, 2010-2011); объединить их с существующими данными путем полного слияния; заполнить пропущенное значение; рассчитать сумму.

user<-c("Tom","Tom","Jim","Jim")
order_time<-c("2018-01-01", "2018-01-04", "2018-01-02","2018-01-04")
total_spending<-c(20,80,50,60)
dt<-data.frame(user,order_time,total_spending)

> dt
  user order_time total_spending
1  Tom 2018-01-01             20
2  Tom 2018-01-04             80
3  Jim 2018-01-02             50
4  Jim 2018-01-04             60

Желаемый вывод

user order_time total_spending cumulative_spending
1  Tom 2018-01-01             20                  20
2  Tom 2018-01-02              0                  20
3  Tom 2018-01-03              0                  20
4  Tom 2018-01-04             80                 100
5  Jim 2018-01-02             50                  50
6  Jim 2018-01-03              0                  50
7  Jim 2018-01-04             60                 110

1 Ответ

0 голосов
/ 08 мая 2018

Вы можете использовать complete с seq.Date:

dt %>% 
  mutate(order_time = as.Date(order_time)) %>%
  group_by(user) %>%
  complete(order_time =seq.Date(min(order_time), max(order_time), by="day")) %>%
  replace_na(list(total_spending = 0)) %>%
  mutate(cumulative_spending = cumsum(total_spending))

Выход:

# A tibble: 7 x 4
# Groups:   user [2]
  user  order_time total_spending cumulative_spending
  <fct> <date>              <dbl>               <dbl>
1 Jim   2018-01-02            50.                 50.
2 Jim   2018-01-03             0.                 50.
3 Jim   2018-01-04            60.                110.
4 Tom   2018-01-01            20.                 20.
5 Tom   2018-01-02             0.                 20.
6 Tom   2018-01-03             0.                 20.
7 Tom   2018-01-04            80.                100.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...