I am using the following libraries in R:
library(tidyverse)
library(timetk)
library(readxl)
library(writexl)
I have data like this:
structure(list(hour = c("0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300", "0000", "0100", "0200", "0300", "0400",
"0500", "0600", "0700", "0800", "0900", "1000", "1100", "1200",
"1300", "1400", "1500", "1600", "1700", "1800", "1900", "2000",
"2100", "2200", "2300"), Monday = c("6", "2", "4", "1", "3",
"1", "2", "4", "10", "10", "22", "16", "9", "10", "12", "8",
"8", "10", "14", "5", "5", "7", "12", "4", "5", "6", "3", "1",
"2", "2", "1", "5", "11", "7", "13", "9", "8", "14", "8", "13",
"11", "8", "11", "13", "7", "15", "8", "2", "2", "2", "1", "2",
"2", "1", "2", "5", "8", "19", "16", "10", "12", "9", "16", "10",
"13", "6", "10", "17", "12", "4", "6", "10", "2", "1", "4", "5",
"3", "2", "6", "5", "4", "9", "10", "12", "15", "11", "2", "14",
"15", "16", "15", "7", "19", "7", "7", "5", "1", "3", "2", "1",
"2", "4", "4", "5", "10", "11", "13", "8", "15", "19", "17",
"11", "13", "10", "6", "8", "7", "16", "8", "7", "3", "3", "3",
"3", "4", "4", "3", "6", "5", "8", "19", "13", "9", "8", "10",
"15", "10", "11", "9", "14", "12", "12", "4", "7", "6", "2",
"4", NA, "1", "2", "1", "7", "9", "7", "8", "11", "14", "13",
"16", "8", "19", "12", "10", "17", "13", "7", "3", "7"), Tuesday = c("7",
"5", "4", "1", "1", "5", "3", "3", "13", "9", "8", "11", "5",
"13", "7", "7", "6", "9", "9", "8", "9", "9", "7", "5", "1",
"2", NA, "3", "1", "2", "4", "8", "15", "7", "8", "9", "11",
"5", "6", "7", "13", "12", "12", "9", "8", "7", "13", "4", "1",
"4", "1", "3", "1", "1", "3", "4", "8", "6", "16", "9", "17",
"9", "6", "10", "13", "6", "13", "8", "7", "5", "5", "4", "4",
"2", "3", "0", "1", "2", "4", "7", "14", "13", "8", "9", "10",
"9", "14", "8", "6", "13", "17", "13", "13", "7", "6", "2", "3",
"2", "1", "1", "3", "1", "5", "9", "9", "12", "8", "14", "15",
"8", "9", "17", "6", "15", "4", "12", "17", "8", "7", "7", "4",
"1", "4", "2", "0", "4", "3", "2", "8", "12", "9", "7", "9",
"11", "9", "7", "10", "11", "10", "12", "2", "8", "8", "6", "1",
"2", "3", "5", "2", "3", "7", "8", "6", "11", "10", "12", "15",
"13", "10", "7", "12", "17", "8", "10", "9", "10", "5", "3"),
Wednesday = c("4", "5", "4", "3", "1", "4", "6", "6", "13",
"8", "13", "13", "13", "9", "5", "16", "9", "8", "18", "6",
"11", "4", "4", "10", "3", NA, "1", "2", "3", "3", "1", "2",
"4", "13", "8", "7", "12", "13", "8", "9", "10", "12", "12",
"6", "15", "11", "7", "6", "6", "2", "2", "4", "4", "2",
"4", "8", "7", "8", "14", "7", "8", "11", "10", "12", "11",
"10", "11", "11", "17", "5", "9", "4", "3", "1", "1", "3",
"2", "2", "0", "4", "12", "10", "11", "7", "11", "12", "12",
"7", "14", "12", "6", "12", "12", "8", "11", "5", "3", "2",
"0", "2", "2", "2", "4", "5", "5", "10", "9", "13", "14",
"14", "7", "9", "6", "5", "11", "13", "8", "11", "9", "8",
"8", "3", "4", "1", "2", "1", "3", "4", "4", "16", "14",
"13", "5", "9", "14", "15", "12", "9", "8", "11", "9", "6",
"9", "3", "4", "2", "3", "2", "2", "1", "3", "7", "7", "7",
"5", "16", "14", "8", "7", "9", "11", "15", "17", "16", "9",
"10", "6", "7"), Thursday = c("5", "3", "4", "1", "2", "1",
"1", "4", "5", "8", "13", "14", "10", "9", "9", "16", "10",
"6", "8", "10", "10", "11", "6", "12", "4", "3", "4", "6",
"2", "3", "2", "5", "7", "9", "13", "15", "14", "11", "9",
"6", "12", "11", "8", "10", "6", "8", "5", "3", "4", "5",
"0", "3", "3", "4", "1", "1", "7", "3", "16", "9", "11",
"16", "10", "15", "13", "11", "9", "12", "12", "7", "6",
"9", "4", "5", "2", "3", "1", NA, "2", "6", "4", "6", "9",
"7", "10", "9", "7", "7", "10", "11", "16", "7", "22", "12",
"6", "5", "3", "4", "3", "1", "1", "3", "3", "6", "7", "7",
"8", "10", "12", "9", "8", "10", "5", "12", "13", "13", "10",
"7", "5", "5", "8", "3", "2", "2", "2", "0", "6", "4", "3",
"11", "9", "11", "12", "13", "10", "9", "8", "7", "6", "9",
"6", "9", "8", "10", "3", "4", "6", "3", "3", "2", "4", "7",
"7", "7", "6", "11", "11", "11", "9", "5", "10", "7", "14",
"16", "7", "5", "6", "6"), Friday = c("6", "4", "1", "1",
"2", "0", "2", "4", "10", "4", "8", "9", "15", "9", "9",
"9", "9", "8", "8", "7", "10", "13", "5", "2", "3", "3",
"5", "3", "3", "8", "3", "4", "7", "9", "14", "9", "15",
"8", "7", "11", "14", "10", "4", "11", "8", "8", "7", "8",
"4", "2", "8", "2", "1", "1", "4", "1", "8", "7", "11", "16",
"11", "12", "9", "10", "4", "5", "4", "13", "8", "9", "5",
"7", "4", "3", "5", "1", "2", "3", "2", "6", "4", "7", "12",
"11", "7", "10", "8", "9", "12", "7", "5", "12", "7", "9",
"8", "9", "2", "2", "1", "3", "2", "2", "4", "3", "6", "7",
"14", "8", "13", "13", "10", "12", "11", "13", "8", "8",
"11", "8", "10", "6", "4", "3", "4", "3", "2", "3", "1",
"1", "3", "4", "10", "12", "9", "18", "5", "12", "9", "9",
"13", "10", "14", "4", "11", "6", "2", "5", "2", "3", "2",
"3", "4", "7", "8", "11", "7", "15", "12", "10", "8", "14",
"6", "10", "11", "9", "16", "13", "9", "6"), Saturday = c("4",
"6", "4", "4", "1", "4", "5", "4", "4", "5", "6", "7", "6",
"8", "7", "4", "11", "10", "10", "10", "9", "7", "6", "5",
"8", "5", "6", "2", "1", "1", "5", "5", "5", "10", "11",
"12", "8", "9", "8", "10", "9", "3", "9", "12", "11", "7",
"17", "5", "4", "4", "0", "4", "4", "3", "2", "4", "5", "13",
"7", "5", "9", "8", "10", "11", "9", "8", "12", "18", "8",
"11", "10", "4", "5", "8", "5", "3", "4", "5", "2", "6",
"5", "6", "9", "11", "7", "11", "8", "11", "2", "12", "9",
"10", "13", "9", "7", "8", "7", "3", "3", "2", "3", "3",
"5", "8", "5", "5", "13", "15", "8", "13", "10", "8", "10",
"6", "13", "6", "8", "9", "8", "6", "5", "6", "6", "4", "3",
"2", "4", "5", "4", "8", "10", "6", "13", "15", "11", "10",
"10", "4", "8", "7", "10", "9", "8", "8", "6", "3", "6",
"5", "3", "3", "2", "6", "9", "5", "11", "10", "8", "8",
"16", "9", "11", "6", "7", "11", "17", "10", "9", "8"), Sunday = c("6",
"6", "4", "2", "1", "1", "3", "4", "8", "7", "9", "10", "11",
"14", "7", "13", "8", "11", "9", "10", "12", "6", "8", "3",
"5", "3", "1", "2", "4", "3", "2", "8", "11", "9", "11",
"9", "7", "7", "8", "6", "5", "6", "10", "24", "15", "4",
"5", "2", "8", "2", "2", "5", "0", "2", "4", "6", "4", "8",
"6", "7", "9", "6", "8", "17", "10", "10", "8", "10", "13",
"6", "5", "4", "5", "6", "2", "4", "1", "2", "1", "3", "8",
"8", "12", "13", "10", "8", "8", "6", "7", "8", "9", "11",
"8", "8", "5", "5", "3", "4", "3", "3", "1", "1", "5", "3",
"6", "10", "3", "8", "4", "9", "7", "6", "7", "5", "10",
"8", "11", "10", "8", "13", "4", "6", "4", "2", "4", "1",
"6", "3", "5", "6", "7", "14", "8", "7", "6", "11", "9",
"8", "12", "6", "11", "10", "7", "5", "3", "4", "3", "4",
"2", "6", "7", "7", "6", "9", "15", "19", "5", "9", "10",
"9", "12", "10", "10", "12", "10", "7", "12", "7")), row.names = c(NA,
-168L), class = c("tbl_df", "tbl", "data.frame"))
I know the start date and the end date, so I have them set:
start_date <- "2018-04-09 00:00:00"
end_date <- "2021-09-26 23:00:00"
date_seq <- tk_make_timeseries(
start_date = start_date,
end_date = end_date,
by = "hour"
) %>%
as_tibble() %>%
mutate(rn = rep(1:24, nrow(date_seq)/24))
What I am trying to do is get my data out of the weird wide format and make it long. Monday 00:00:00 Value, Monday 01:00:00 Value etc.
Possible?
CodePudding user response:
I don't know if I understand your intention well. However, it seems to me that you want to transform your pasted data into a long structure. So I have your data in a tibble
named df
.
# A tibble: 168 x 8
hour Monday Tuesday Wednesday Thursday Friday Saturday Sunday
<chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
1 0000 6 7 4 5 6 4 6
2 0100 2 5 5 3 4 6 6
3 0200 4 4 4 4 1 4 4
4 0300 1 1 3 1 1 4 2
5 0400 3 1 1 2 2 1 1
6 0500 1 5 4 1 0 4 1
7 0600 2 3 6 1 2 5 3
8 0700 4 3 6 4 4 4 4
9 0800 10 13 13 5 10 4 8
10 0900 10 9 8 8 4 5 7
# ... with 158 more rows
First, let's do the appropriate mutation. However, I recommend using the lubridate
package.
library(tidyverse)
library(lubridate)
df1 = df %>% mutate(
nWeek = rep(1:(nrow(.)/24), each=24),
hour = as.numeric(hour)/100) %>%
pivot_longer(c(-hour,-nWeek), names_to = "WeekDay", values_to = "val") %>%
mutate(WeekDay = WeekDay %>% fct_inorder()) %>%
arrange(nWeek, WeekDay, hour)
output df1
# A tibble: 1,176 x 4
hour nWeek WeekDay val
<dbl> <int> <fct> <chr>
1 0 1 Monday 6
2 1 1 Monday 2
3 2 1 Monday 4
4 3 1 Monday 1
5 4 1 Monday 3
6 5 1 Monday 1
7 6 1 Monday 2
8 7 1 Monday 4
9 8 1 Monday 10
10 9 1 Monday 10
# ... with 1,166 more rows
Now we can add a start date to this.
star_date = ymd_hms("2018-04-09 00:00:00")
df1 %>% mutate(
DateTime = star_date
ddays((nWeek-1)*7 as.numeric(WeekDay)-1) dhours(hour)
)
output
# A tibble: 1,176 x 5
hour nWeek WeekDay val DateTime
<dbl> <int> <fct> <chr> <dttm>
1 0 1 Monday 6 2018-04-09 00:00:00
2 1 1 Monday 2 2018-04-09 01:00:00
3 2 1 Monday 4 2018-04-09 02:00:00
4 3 1 Monday 1 2018-04-09 03:00:00
5 4 1 Monday 3 2018-04-09 04:00:00
6 5 1 Monday 1 2018-04-09 05:00:00
7 6 1 Monday 2 2018-04-09 06:00:00
8 7 1 Monday 4 2018-04-09 07:00:00
9 8 1 Monday 10 2018-04-09 08:00:00
10 9 1 Monday 10 2018-04-09 09:00:00
# ... with 1,166 more rows
Hope this is the effect you have been expecting.