Как преобразовать ваши данные и создать тепловую карту с помощью geom_tile? - PullRequest
1 голос
/ 30 апреля 2019

У меня есть фрейм данных с 60 строками (или 60 делами, которые представляют рабочие графики) и 672 столбцами, которые представляют временные шаги.Время измеряется в течение 7 дней (начиная с понедельника) с 15-минутными интервалами, оно начинается в 04:00 и заканчивается в 03:45.

Структура фрейма данных, представляющего 4 дня:

dput(head(TiNiSWeek,4))
structure(list(`04:00` = c(0, 0, 0, 0), `04:15` = c(0, 0, 0, 
0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 2, 0), `08:15` = c(0, 0, 2, 0), `08:30` = c(0, 0, 2, 0), `08:45` = c(0, 
0, 2, 0), `09:00` = c(0, 2, 2, 0), `09:15` = c(0, 2, 2, 0), `09:30` = c(0, 
2, 2, 0), `09:45` = c(0, 2, 2, 0), `10:00` = c(0, 2, 2, 2), `10:15` = c(0, 
2, 2, 2), `10:30` = c(0, 2, 2, 2), `10:45` = c(0, 2, 2, 2), `11:00` = c(0, 
2, 2, 2), `11:15` = c(0, 2, 2, 2), `11:30` = c(0, 2, 2, 2), `11:45` = c(0, 
2, 2, 2), `12:00` = c(0, 2, 0, 2), `12:15` = c(0, 2, 2, 2), `12:30` = c(0, 
2, 2, 2), `12:45` = c(0, 2, 2, 2), `13:00` = c(0, 2, 2, 2), `13:15` = c(0, 
2, 2, 2), `13:30` = c(0, 2, 2, 2), `13:45` = c(0, 2, 2, 2), `14:00` = c(0, 
2, 2, 2), `14:15` = c(0, 2, 2, 2), `14:30` = c(0, 2, 2, 2), `14:45` = c(0, 
2, 2, 2), `15:00` = c(0, 2, 2, 2), `15:15` = c(0, 2, 2, 2), `15:30` = c(0, 
2, 2, 2), `15:45` = c(0, 2, 2, 2), `16:00` = c(0, 2, 2, 2), `16:15` = c(0, 
2, 2, 2), `16:30` = c(0, 2, 2, 2), `16:45` = c(0, 2, 2, 2), `17:00` = c(0, 
2, 0, 2), `17:15` = c(0, 2, 0, 2), `17:30` = c(0, 2, 0, 2), `17:45` = c(0, 
0, 0, 2), `18:00` = c(0, 0, 0, 0), `18:15` = c(0, 0, 0, 0), `18:30` = c(0, 
0, 0, 0), `18:45` = c(0, 0, 0, 0), `19:00` = c(0, 0, 0, 0), `19:15` = c(0, 
0, 0, 0), `19:30` = c(0, 0, 0, 0), `19:45` = c(0, 0, 0, 0), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(2, 0, 0, 0), `07:15` = c(2, 
0, 0, 0), `07:30` = c(2, 0, 0, 0), `07:45` = c(2, 0, 0, 0), `08:00` = c(2, 
0, 2, 0), `08:15` = c(2, 0, 2, 0), `08:30` = c(2, 0, 2, 0), `08:45` = c(2, 
0, 2, 0), `09:00` = c(2, 2, 2, 0), `09:15` = c(2, 2, 2, 0), `09:30` = c(2, 
2, 2, 0), `09:45` = c(2, 2, 2, 0), `10:00` = c(2, 2, 2, 2), `10:15` = c(2, 
2, 2, 2), `10:30` = c(2, 2, 2, 2), `10:45` = c(2, 2, 2, 2), `11:00` = c(2, 
2, 2, 2), `11:15` = c(2, 2, 2, 2), `11:30` = c(2, 2, 2, 2), `11:45` = c(2, 
2, 2, 2), `12:00` = c(2, 2, 0, 2), `12:15` = c(2, 2, 0, 2), `12:30` = c(2, 
2, 2, 2), `12:45` = c(2, 2, 2, 2), `13:00` = c(2, 2, 2, 2), `13:15` = c(2, 
2, 2, 2), `13:30` = c(2, 2, 2, 2), `13:45` = c(2, 2, 2, 2), `14:00` = c(2, 
2, 2, 2), `14:15` = c(2, 2, 2, 2), `14:30` = c(2, 2, 2, 2), `14:45` = c(2, 
2, 2, 2), `15:00` = c(2, 2, 2, 0), `15:15` = c(2, 2, 2, 0), `15:30` = c(2, 
2, 2, 0), `15:45` = c(2, 2, 2, 0), `16:00` = c(2, 2, 2, 0), `16:15` = c(2, 
2, 2, 0), `16:30` = c(2, 2, 2, 0), `16:45` = c(2, 2, 2, 0), `17:00` = c(2, 
2, 2, 0), `17:15` = c(0, 2, 2, 0), `17:30` = c(0, 2, 0, 0), `17:45` = c(0, 
2, 0, 0), `18:00` = c(0, 0, 0, 0), `18:15` = c(0, 0, 0, 0), `18:30` = c(0, 
0, 0, 0), `18:45` = c(0, 0, 0, 0), `19:00` = c(0, 0, 0, 0), `19:15` = c(0, 
0, 0, 0), `19:30` = c(0, 0, 0, 0), `19:45` = c(0, 0, 0, 0), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 2, 0), `08:15` = c(0, 0, 2, 0), `08:30` = c(0, 0, 2, 0), `08:45` = c(0, 
0, 2, 0), `09:00` = c(0, 0, 2, 0), `09:15` = c(0, 0, 2, 0), `09:30` = c(0, 
2, 2, 0), `09:45` = c(0, 2, 2, 0), `10:00` = c(0, 2, 2, 2), `10:15` = c(0, 
2, 2, 2), `10:30` = c(0, 2, 2, 2), `10:45` = c(0, 2, 2, 2), `11:00` = c(0, 
2, 2, 2), `11:15` = c(0, 2, 2, 2), `11:30` = c(0, 2, 2, 2), `11:45` = c(0, 
2, 2, 2), `12:00` = c(0, 2, 2, 2), `12:15` = c(0, 2, 2, 2), `12:30` = c(0, 
2, 2, 2), `12:45` = c(0, 2, 2, 2), `13:00` = c(0, 2, 2, 2), `13:15` = c(0, 
2, 0, 2), `13:30` = c(0, 2, 0, 2), `13:45` = c(0, 2, 2, 2), `14:00` = c(0, 
2, 2, 2), `14:15` = c(0, 2, 2, 2), `14:30` = c(0, 2, 2, 2), `14:45` = c(0, 
2, 2, 2), `15:00` = c(0, 2, 2, 0), `15:15` = c(0, 2, 2, 0), `15:30` = c(0, 
2, 2, 0), `15:45` = c(0, 2, 2, 0), `16:00` = c(0, 2, 2, 0), `16:15` = c(0, 
2, 2, 0), `16:30` = c(0, 2, 2, 0), `16:45` = c(0, 2, 2, 0), `17:00` = c(0, 
2, 2, 0), `17:15` = c(0, 2, 0, 0), `17:30` = c(0, 2, 0, 0), `17:45` = c(0, 
2, 0, 0), `18:00` = c(0, 0, 0, 0), `18:15` = c(0, 0, 0, 0), `18:30` = c(0, 
0, 0, 0), `18:45` = c(0, 0, 0, 0), `19:00` = c(0, 0, 0, 0), `19:15` = c(0, 
0, 0, 0), `19:30` = c(0, 0, 0, 0), `19:45` = c(0, 0, 0, 0), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 2, 0), `08:15` = c(0, 0, 2, 0), `08:30` = c(0, 0, 2, 0), `08:45` = c(0, 
0, 2, 0), `09:00` = c(0, 2, 2, 0), `09:15` = c(0, 2, 2, 0), `09:30` = c(0, 
2, 2, 0), `09:45` = c(0, 2, 2, 2), `10:00` = c(0, 2, 2, 2), `10:15` = c(0, 
2, 2, 2), `10:30` = c(0, 2, 2, 2), `10:45` = c(0, 2, 2, 2), `11:00` = c(0, 
2, 2, 2), `11:15` = c(0, 2, 2, 2), `11:30` = c(0, 2, 2, 2), `11:45` = c(0, 
2, 2, 2), `12:00` = c(0, 2, 2, 2), `12:15` = c(0, 2, 2, 2), `12:30` = c(0, 
2, 2, 2), `12:45` = c(0, 2, 2, 2), `13:00` = c(0, 2, 0, 2), `13:15` = c(0, 
2, 2, 2), `13:30` = c(0, 2, 2, 2), `13:45` = c(0, 2, 2, 2), `14:00` = c(0, 
2, 2, 2), `14:15` = c(0, 2, 2, 2), `14:30` = c(0, 2, 2, 2), `14:45` = c(0, 
2, 2, 2), `15:00` = c(0, 2, 2, 2), `15:15` = c(0, 2, 2, 2), `15:30` = c(0, 
2, 2, 2), `15:45` = c(0, 2, 2, 2), `16:00` = c(0, 2, 2, 2), `16:15` = c(0, 
2, 2, 2), `16:30` = c(0, 2, 2, 2), `16:45` = c(0, 2, 2, 2), `17:00` = c(0, 
2, 2, 2), `17:15` = c(0, 2, 2, 2), `17:30` = c(0, 2, 2, 2), `17:45` = c(0, 
2, 2, 2), `18:00` = c(0, 0, 2, 2), `18:15` = c(0, 0, 2, 2), `18:30` = c(0, 
0, 0, 2), `18:45` = c(0, 0, 0, 2), `19:00` = c(0, 0, 0, 2), `19:15` = c(0, 
0, 0, 2), `19:30` = c(0, 0, 0, 2), `19:45` = c(0, 0, 0, 2), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 2, 0), `08:15` = c(0, 0, 2, 0), `08:30` = c(0, 0, 2, 0), `08:45` = c(0, 
0, 2, 0), `09:00` = c(0, 2, 2, 0), `09:15` = c(0, 2, 2, 0), `09:30` = c(0, 
2, 2, 2), `09:45` = c(0, 2, 2, 2), `10:00` = c(0, 2, 2, 2), `10:15` = c(0, 
2, 2, 2), `10:30` = c(0, 2, 2, 2), `10:45` = c(0, 2, 2, 2), `11:00` = c(0, 
2, 2, 2), `11:15` = c(0, 2, 2, 2), `11:30` = c(0, 2, 2, 2), `11:45` = c(0, 
2, 2, 2), `12:00` = c(0, 2, 2, 2), `12:15` = c(0, 2, 2, 2), `12:30` = c(0, 
2, 2, 2), `12:45` = c(0, 2, 2, 2), `13:00` = c(0, 2, 2, 2), `13:15` = c(0, 
2, 2, 2), `13:30` = c(0, 2, 2, 2), `13:45` = c(0, 2, 2, 2), `14:00` = c(0, 
2, 2, 2), `14:15` = c(0, 2, 0, 2), `14:30` = c(0, 2, 2, 2), `14:45` = c(0, 
2, 2, 2), `15:00` = c(0, 2, 2, 2), `15:15` = c(0, 2, 2, 2), `15:30` = c(0, 
2, 2, 2), `15:45` = c(0, 2, 2, 2), `16:00` = c(0, 2, 2, 2), `16:15` = c(0, 
2, 2, 2), `16:30` = c(0, 2, 2, 2), `16:45` = c(0, 2, 2, 2), `17:00` = c(0, 
2, 2, 2), `17:15` = c(0, 2, 0, 2), `17:30` = c(0, 2, 0, 2), `17:45` = c(0, 
2, 0, 2), `18:00` = c(0, 0, 0, 2), `18:15` = c(0, 0, 0, 2), `18:30` = c(0, 
0, 0, 2), `18:45` = c(0, 0, 0, 2), `19:00` = c(0, 0, 0, 2), `19:15` = c(0, 
0, 0, 2), `19:30` = c(0, 0, 0, 2), `19:45` = c(0, 0, 0, 2), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 0, 0), `08:15` = c(0, 0, 0, 0), `08:30` = c(0, 0, 0, 0), `08:45` = c(0, 
0, 0, 0), `09:00` = c(0, 0, 0, 0), `09:15` = c(0, 0, 0, 0), `09:30` = c(0, 
0, 0, 0), `09:45` = c(0, 0, 0, 0), `10:00` = c(0, 0, 0, 0), `10:15` = c(0, 
0, 0, 0), `10:30` = c(0, 0, 0, 0), `10:45` = c(0, 0, 0, 0), `11:00` = c(0, 
0, 0, 0), `11:15` = c(0, 0, 0, 0), `11:30` = c(0, 0, 0, 0), `11:45` = c(0, 
0, 0, 0), `12:00` = c(0, 0, 0, 0), `12:15` = c(0, 0, 0, 0), `12:30` = c(0, 
0, 0, 0), `12:45` = c(0, 0, 0, 0), `13:00` = c(0, 0, 0, 0), `13:15` = c(0, 
0, 0, 0), `13:30` = c(0, 0, 0, 0), `13:45` = c(0, 0, 0, 0), `14:00` = c(0, 
0, 0, 0), `14:15` = c(0, 0, 0, 0), `14:30` = c(0, 0, 0, 0), `14:45` = c(0, 
0, 0, 0), `15:00` = c(0, 0, 0, 0), `15:15` = c(0, 0, 0, 0), `15:30` = c(0, 
0, 0, 0), `15:45` = c(0, 0, 0, 0), `16:00` = c(0, 0, 0, 0), `16:15` = c(0, 
0, 0, 0), `16:30` = c(0, 0, 0, 0), `16:45` = c(0, 0, 0, 0), `17:00` = c(0, 
0, 0, 0), `17:15` = c(0, 0, 0, 0), `17:30` = c(0, 0, 0, 0), `17:45` = c(0, 
0, 0, 0), `18:00` = c(0, 0, 0, 0), `18:15` = c(0, 0, 0, 0), `18:30` = c(0, 
0, 0, 0), `18:45` = c(0, 0, 0, 0), `19:00` = c(0, 0, 0, 0), `19:15` = c(0, 
0, 0, 0), `19:30` = c(0, 0, 0, 0), `19:45` = c(0, 0, 0, 0), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0), `04:00` = c(0, 0, 0, 0), `04:15` = c(0, 
0, 0, 0), `04:30` = c(0, 0, 0, 0), `04:45` = c(0, 0, 0, 0), `05:00` = c(0, 
0, 0, 0), `05:15` = c(0, 0, 0, 0), `05:30` = c(0, 0, 0, 0), `05:45` = c(0, 
0, 0, 0), `06:00` = c(0, 0, 0, 0), `06:15` = c(0, 0, 0, 0), `06:30` = c(0, 
0, 0, 0), `06:45` = c(0, 0, 0, 0), `07:00` = c(0, 0, 0, 0), `07:15` = c(0, 
0, 0, 0), `07:30` = c(0, 0, 0, 0), `07:45` = c(0, 0, 0, 0), `08:00` = c(0, 
0, 0, 0), `08:15` = c(0, 0, 0, 0), `08:30` = c(0, 0, 0, 0), `08:45` = c(0, 
0, 0, 0), `09:00` = c(0, 0, 0, 0), `09:15` = c(0, 0, 0, 0), `09:30` = c(0, 
0, 0, 0), `09:45` = c(0, 0, 0, 0), `10:00` = c(0, 0, 0, 0), `10:15` = c(0, 
0, 0, 0), `10:30` = c(0, 0, 0, 0), `10:45` = c(0, 0, 0, 0), `11:00` = c(0, 
0, 0, 0), `11:15` = c(0, 0, 0, 0), `11:30` = c(0, 0, 0, 0), `11:45` = c(0, 
0, 0, 0), `12:00` = c(0, 0, 0, 0), `12:15` = c(0, 0, 0, 0), `12:30` = c(0, 
0, 0, 0), `12:45` = c(0, 0, 0, 0), `13:00` = c(0, 0, 0, 0), `13:15` = c(0, 
0, 0, 0), `13:30` = c(0, 0, 0, 0), `13:45` = c(0, 0, 0, 0), `14:00` = c(0, 
0, 0, 0), `14:15` = c(0, 0, 0, 0), `14:30` = c(0, 0, 0, 0), `14:45` = c(0, 
0, 0, 0), `15:00` = c(0, 0, 0, 0), `15:15` = c(0, 0, 0, 0), `15:30` = c(0, 
0, 0, 0), `15:45` = c(0, 0, 0, 0), `16:00` = c(0, 0, 0, 0), `16:15` = c(0, 
0, 0, 0), `16:30` = c(0, 0, 0, 0), `16:45` = c(0, 0, 0, 0), `17:00` = c(0, 
0, 0, 0), `17:15` = c(0, 0, 0, 0), `17:30` = c(0, 0, 0, 0), `17:45` = c(0, 
0, 0, 0), `18:00` = c(0, 0, 0, 0), `18:15` = c(0, 0, 0, 0), `18:30` = c(0, 
0, 0, 0), `18:45` = c(0, 0, 0, 0), `19:00` = c(0, 0, 0, 0), `19:15` = c(0, 
0, 0, 0), `19:30` = c(0, 0, 0, 0), `19:45` = c(0, 0, 0, 0), `20:00` = c(0, 
0, 0, 0), `20:15` = c(0, 0, 0, 0), `20:30` = c(0, 0, 0, 0), `20:45` = c(0, 
0, 0, 0), `21:00` = c(0, 0, 0, 0), `21:15` = c(0, 0, 0, 0), `21:30` = c(0, 
0, 0, 0), `21:45` = c(0, 0, 0, 0), `22:00` = c(0, 0, 0, 0), `22:15` = c(0, 
0, 0, 0), `22:30` = c(0, 0, 0, 0), `22:45` = c(0, 0, 0, 0), `23:00` = c(0, 
0, 0, 0), `23:15` = c(0, 0, 0, 0), `23:30` = c(0, 0, 0, 0), `23:45` = c(0, 
0, 0, 0), `00:00` = c(0, 0, 0, 0), `00:15` = c(0, 0, 0, 0), `00:30` = c(0, 
0, 0, 0), `00:45` = c(0, 0, 0, 0), `01:00` = c(0, 0, 0, 0), `01:15` = c(0, 
0, 0, 0), `01:30` = c(0, 0, 0, 0), `01:45` = c(0, 0, 0, 0), `02:00` = c(0, 
0, 0, 0), `02:15` = c(0, 0, 0, 0), `02:30` = c(0, 0, 0, 0), `02:45` = c(0, 
0, 0, 0), `03:00` = c(0, 0, 0, 0), `03:15` = c(0, 0, 0, 0), `03:30` = c(0, 
0, 0, 0), `03:45` = c(0, 0, 0, 0)), row.names = c(NA, 4L), class = "data.frame")

Ниже приведен пример фрейма данных с 10 наблюдениями за 3 дня, начиная с 04:00 и заканчивая 03: 45

     04:00 04:15...03:45 04:00 04:15...03:45 04:00 04:15...03:45
 1:     0     0      0     0      0      2        2    0        2
 2:     2     2      0     2      2      2        0    0        0
 3:     2     0      2     2      2      2        0    2        2
 4:     0     0      0     2      2      2        0    2        2
 5:     0     0      0     2      2      2        0    2        2
 6:     2     0      2     0      2      2        0    2        2
 7:     0     0      0     2      2      2        2    0        2
 8:     2     2      2     2      2      2        0    0        2
 9:     0     0      0     2      2      2        0    0        2
10:     2     2      2     2      2      2        0    0        2

Мой первый вопрос - как преобразовать данные, чтобы показать ежедневную работурасписания;другими словами, первое наблюдение начинается в 04:00 и заканчивается в 03:45, чтобы показать расписание на понедельник;затем 04:00 и конец, заканчивающийся в 03:45, чтобы показать расписание вторника.

          Monday                    Tuesday            Wednesday  
      04:00 04:15...03:45   04:00 04:15...03:45   04:00 04:15...03:45
 1:     0     0      0        0      0      2        2    0        2
 2:     2     2      0        2      2      2        0    0        0
 3:     2     0      2        2      2      2        0    2        2
 4:     0     0      0        2      2      2        0    2        2
 5:     0     0      0        2      2      2        0    2        2
 6:     2     0      2        0      2      2        0    2        2
 7:     0     0      0        2      2      2        2    0        2
 8:     2     2      2        2      2      2        0    0        2
 9:     0     0      0        2      2      2        0    0        2
10:     2     2      2        2      2      2        0    0        2

На следующем шаге я хочу извлечь начало и конец интервалов, начинающихся с '2'

Например, 2: понедельник: 04: 00-04: 15;Вторник: 04: 00-04: 15;

Наконец, я хотел бы преобразовать данные и нанести на график начало и конец интервалов с помощью geom_tile так же, как показано ниже:

На основеответ выше + моя работа улучшенный сюжет

enter image description here

1 Ответ

3 голосов
/ 30 апреля 2019

Вот как бы я поступил по этому поводу. Я поместил вывод вашего оператора dput в переменную с именем df.

Сначала я бы переименовал ваши имена, чтобы включить день недели:

df2 <- df
weekdays <- c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
colnames(df2) <- paste0(rep(weekdays, each = 24 * 4), "_", colnames(df2))

Затем я добавляю индекс к каждой строке, чтобы его можно было использовать как ось Y.

df2$index <- 1:nrow(df2)

Затем я объединяю данные из широкого формата в длинный формат и задаю имена символов, которые были нашими именами вместо фактора:

df3 <- reshape2::melt(df2, id.vars = "index")
df3$variable <- as.character(df3$variable)

Прежние имена теперь должны быть снова интерпретированы как день + время. Я установил день как фактор после заказа weekdays. Я устанавливаю переменную времени как непрерывную hour + minutes / 60.

df3$day <- sapply(strsplit(df3$variable, "_"), `[`, 1)
df3$day <- factor(df3$day, levels = weekdays)
df3$time <- sapply(strsplit(df3$variable, "_"), `[`, 2)
df3$time <- as.numeric(substr(df3$time, 1, 2)) + as.numeric(substr(df3$time, 4, 5)) / 60

Тогда мы можем построить это как растр с днями в виде граней:

ggplot(df3, aes(x = time, y = index, fill = value)) +
  geom_raster() +
  facet_grid(~ day) +
  scale_x_continuous(expand = c(0,0), name = "Hour") +
  theme(panel.spacing = unit(0, "mm"))

enter image description here

Это очень близко к предложенной вами тепловой карте.

Наконец, для извлечения инверсий для индекса i:


library(S4Vectors)
i <- 4
rle <- Rle(as.numeric(df[i,]))
ends <- end(rle)
starts <- start(rle)
out <- data.frame(length = rle@lengths, 
                  values = rle@values, 
                  start = starts, 
                  end = ends)
head(out)
  length values start end
1     24      0     1  24
2     32      2    25  56
3     64      0    57 120
4     20      2   121 140
5     76      0   141 216
6     20      2   217 236

Которые вы можете преобразовать во времена следующим образом:

colnames(df)[out$start[out$values == 2]]
[1] "10:00" "10:00" "10:00" "09:45" "09:30"

РЕДАКТИРОВАТЬ: Вы можете преобразовать непрерывное представление времени обратно в формат, подобный часам, используя эту функцию как labels внутри scale_x_continuous/discrete():

timeformat <- function(x){
  # Get back relevant numbers
  unshift <- ifelse(x > 24, x - 24, x)
  hours <- unshift - unshift %% 1
  minutes <- (unshift - hours) * 60

  # Format
  hour <- formatC(hour, width = 2, format = "d", flag = "0")
  minutes <- formatC(minutes, width = 2, format = "d", flag = "0")

  return(paste0(hour,":", minutes))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...