(As an aside, give some consideration into making the gis x-y-z columns into a single column sf object.)
Each of these location is unique? Create a data column to serve as a key.
You have multiple temporal observations for each location? Then you need a single column date of length equal to length(key). Fill in any missing values with NA.
So, now you have id, x,y,z, datetime as your colnames.
Presumably, each of your observation relates to a single date. Create vector like
c(7.97, 84.85, 0.00, 2.82, 0.00, 0.00, 24.49, 0.00, 0.00, 0.00, 0.00, 1.89 .... end year))
rbind, iff the sizes are equal and you have a data field lined up with a date field.
Now your data frame colnames = id, x,y,z,date,observation
What about month?
df %>% filter(date = [extract date field]
The moral of this story is avoid creating a column that you can calculate in a pipe chain.