Сопоставление данных за эту неделю с данными за последние недели в ggplot

#r #ggplot2

#r #ggplot2

Вопрос:

У меня есть наборы данных, структурированные следующим образом

 date    transaction 
8/15/2020   585
8/14/2020   780
8/13/2020   1427.8
8/12/2020   4358
8/11/2020   780.9
8/8/2020    585
8/6/2020    1107.4
8/5/2020    2917.35
8/4/2020    1237.1
  

Есть ли способ построить линейный график со всеми транзакциями, которые произошли на этой неделе, по сравнению с предыдущей неделей? Я попытался отфильтровать данные вручную и назначить их новому фрейму данных, который, казалось, работал, но требовал больших затрат на ручное управление. Можно ли было бы использовать today () и заставить его зарегистрировать день выполнения и запустить результаты оттуда? Спасибо!

Ответ №1:

Для этого вам нужно

  1. реальные Date (с использованием as.Date ), чтобы мы могли обрабатывать их численно (не категориально), и чтобы мы могли разбить их на недели;
  2. используйте format для получения недели года каждой даты; и
  3. facet_wrap чтобы мы могли использовать фасеты и иметь разные оси x.
 dat$date <- as.Date(dat$date, format = "%m/%d/%Y")
dat$week <- format(dat$date, format = "%V") # or %W

library(ggplot2)
ggplot(dat, aes(date, transaction))  
  facet_wrap("week", ncol = 1, scales = "free_x")  
  geom_path()
  

ggplot2 с аспектами по неделям

Комментарии:

1. Классное спасибо! Две последние вещи, как мне ограничить выходные данные отображением только этой и предыдущей недель, если мой набор данных содержит весь год? Могу ли я указать на оси фактический день вместо месяца и числа?

2. Хотя можно утверждать, что «данные отсутствуют» и «нулевое значение» — это две разные вещи … да. В данном случае это может быть вменение, условная замена или несколько других вещей.

3. Чтобы отобразить их оба перекрывающимися без фасетов, вам нужно будет использовать aes(dayofweek, transacvtion) (и вам нужно будет определить dat$dayofweek ).

4. Порядок в ggplot2 всегда выполняется либо (а) в алфавитном порядке, когда значения равны character ; либо (б) в порядке, который вы указываете, когда они равны factor . factor(dat$dayofweek, levels=c("Mon","Tue",...)) ?

5. это то, что я понял впоследствии, спасибо за помощь!