簡體   English   中英

如何轉換數據並使用geom_tile創建熱圖?

[英]How to transform your data and to create a heatmap with geom_tile?

我有一個包含60行的數據框(或表示工作計划的60個案例)和672個表示時間步長的列。 時間以15分鍾的間隔測量7天(從星期一開始),並且從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繪制間隔的開始和結束,如下圖所示:

基於以上答案+我的工作改進情節

在此輸入圖像描述

我就是這樣做的。 我把你的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)

然后我將數據從寬格式轉換為長格式,並將我們的colnames設置為字符而不是因素:

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"))

在此輸入圖像描述

這與您提出的熱圖非常接近。

最后,為了提取索引i的invervals:


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"

編輯:您可以通過將此函數用作scale_x_continuous/discrete()內的labels將連續時間表示轉換回時鍾格式:

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))
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM