Is there a general way to convert a cross table into a long table?
I had made up the following table for illustration, in the real case it has 7 horizontal variables and 9 vertical variables, and all of the variables could repeat, but with only unique combinations of (verticle_var, horiz_var)
cross_table <- matrix(c(c(NA, NA, "Monday", "Monday", "Tuesday", "Tuesday"),
c(NA, NA, "AM", "PM", "AM", "PM"),
c("Store1", "Item1", 1, 2, 1, 3),
c("Store1", "Item3", 2, 5, 1, 6),
c("Store2", "Item1", 3, 8, 1, 3),
c("Store2", "Item2", 5, 2, 5, 0)), ncol = 6)
| Monday | Monday | Tuesday | Tuesday | ||
|---|---|---|---|---|---|
| AM | PM | AM | PM | ||
| Store1 | Item1 | 1 | 2 | 1 | 3 |
| Store1 | Item3 | 2 | 5 | 1 | 6 |
| Store2 | Item1 | 3 | 8 | 1 | 3 |
| Store2 | Item2 | 5 | 2 | 5 | 0 |
I want to convert it into a long table that looks like this:
t(matrix(c(
c("Store1", "Item1", "Monday", "AM", 1),
c("Store1", "Item1", "Monday", "PM", 1),
c("Store1", "Item1", "Tuesday", "AM", 1),
c("Store1", "Item1", "Tuesday", "PM", 1),
c("Store1", "Item2", "Monday", "AM", NA),
c("Store1", "Item2", "Monday", "PM", NA),
c("Store1", "Item2", "Tuesday", "AM", NA),
c("Store1", "Item2", "Tuesday", "PM", NA),
c("Store1", "Item3", "Monday", "AM", 2),
c("Store1", "Item3", "Monday", "PM", 5),
c("Store1", "Item3", "Tuesday", "AM", 1),
c("Store1", "Item3", "Tuesday", "PM", 6),
c("Store2", "Item1", "Monday", "AM", 3),
c("Store2", "Item1", "Monday", "PM", 8),
c("Store2", "Item1", "Tuesday", "AM", 1),
c("Store2", "Item1", "Tuesday", "PM", 3),
c("Store2", "Item2", "Monday", "AM", 5),
c("Store2", "Item2", "Monday", "PM", 2),
c("Store2", "Item2", "Tuesday", "AM", 5),
c("Store2", "Item2", "Tuesday", "PM", 0),
c("Store2", "Item3", "Monday", "AM", NA),
c("Store2", "Item3", "Monday", "PM", NA),
c("Store2", "Item3", "Tuesday", "AM", NA),
c("Store2", "Item3", "Tuesday", "PM", NA)),ncol = 24))
| StoreID | ItemID | Day | Time | Sales |
|---|---|---|---|---|
| Store1 | Item1 | Monday | AM | 1 |
| Store1 | Item1 | Monday | PM | 2 |
| Store1 | Item1 | Tuesday | AM | 1 |
| Store1 | Item1 | Tuesday | PM | 3 |
| Store1 | Item2 | Monday | AM | NA |
| Store1 | Item2 | Monday | PM | NA |
| Store1 | Item2 | Tuesday | AM | NA |
| Store1 | Item2 | Tuesday | PM | NA |
| Store1 | Item3 | Monday | AM | 2 |
| Store1 | Item3 | Monday | PM | 5 |
| Store1 | Item3 | Tuesday | AM | 1 |
| Store1 | Item3 | Tuesday | PM | 6 |
| Store2 | Item1 | Monday | AM | 3 |
| Store2 | Item1 | Monday | PM | 8 |
| Store2 | Item1 | Tuesday | AM | 1 |
| Store2 | Item1 | Tuesday | PM | 3 |
| Store2 | Item2 | Monday | AM | 5 |
| Store2 | Item2 | Monday | PM | 2 |
| Store2 | Item2 | Tuesday | AM | 5 |
| Store2 | Item2 | Tuesday | PM | 0 |
| Store2 | Item3 | Monday | AM | NA |
| Store2 | Item3 | Monday | PM | NA |
| Store2 | Item3 | Tuesday | AM | NA |
| Store2 | Item3 | Tuesday | PM | NA |
How can I achieve this?
Don't know how to start

produces