I have a vector with an interval of one minute.
m1 <- seq(as.POSIXct("2020-02-20 09:00:00"), as.POSIXct("2020-02-20 18:00:00"), by="min")
> head(m1)
[1] "2020-02-20 09:00:00 EET" "2020-02-20 09:01:00 EET" "2020-02-20 09:02:00 EET"
[4] "2020-02-20 09:03:00 EET" "2020-02-20 09:04:00 EET" "2020-02-20 09:05:00 EET"
I can get some intervals with lubridate
package
library(lubridate)
head( minute(m1) ,100)
[1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
[27] 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
[53] 52 53 54 55 56 57 58 59 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[79] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
head( hour(m1) ,100)
[1] 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
[27] 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9
[53] 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
[79] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10
But how do I get the vector say 5 or 15 minutes , or 6 or 12 hours
Something like this
res <- cbind( min1 = minute(m1) ,
min5 = NA , # ??
hour1 = hour(m1),
hour6 = NA) # ??
res
min1 min5 hour1 hour6
[1,] 2 NA 9 NA
[2,] 3 NA 9 NA
[3,] 4 NA 9 NA
[4,] 5 NA 9 NA
[5,] 6 NA 9 NA
[6,] 7 NA 9 NA
[7,] 8 NA 9 NA
[8,] 9 NA 9 NA
[9,] 10 NA 9 NA
[10,] 11 NA 9 NA
[11,] 12 NA 9 NA
[12,] 13 NA 9 NA
[13,] 14 NA 9 NA
[14,] 15 NA 9 NA
[15,] 16 NA 9 NA
[16,] 17 NA 9 NA
[17,] 18 NA 9 NA
[18,] 19 NA 9 NA
[19,] 20 NA 9 NA
[20,] 21 NA 9 NA
[21,] 22 NA 9 NA
[22,] 23 NA 9 NA
[23,] 24 NA 9 NA
[24,] 25 NA 9 NA
[25,] 26 NA 9 NA
[26,] 27 NA 9 NA
[27,] 28 NA 9 NA
[28,] 29 NA 9 NA
[29,] 30 NA 9 NA
[30,] 31 NA 9 NA
[31,] 32 NA 9 NA
[32,] 33 NA 9 NA
[33,] 34 NA 9 NA
[34,] 35 NA 9 NA
[35,] 36 NA 9 NA
[36,] 37 NA 9 NA
[37,] 38 NA 9 NA
[38,] 39 NA 9 NA
[39,] 40 NA 9 NA
[40,] 41 NA 9 NA
[41,] 42 NA 9 NA
[42,] 43 NA 9 NA
[43,] 44 NA 9 NA
[44,] 45 NA 9 NA
[45,] 46 NA 9 NA
[46,] 47 NA 9 NA
[47,] 48 NA 9 NA
[48,] 49 NA 9 NA
[49,] 50 NA 9 NA
[50,] 51 NA 9 NA
[51,] 52 NA 9 NA
[52,] 53 NA 9 NA
[53,] 54 NA 9 NA
[54,] 55 NA 9 NA
[55,] 56 NA 9 NA
[56,] 57 NA 9 NA
[57,] 58 NA 9 NA
[58,] 59 NA 9 NA
[59,] 0 NA 10 NA
[60,] 1 NA 10 NA
[61,] 2 NA 10 NA
[62,] 3 NA 10 NA
[63,] 4 NA 10 NA
[64,] 5 NA 10 NA
[65,] 6 NA 10 NA
[66,] 7 NA 10 NA
[67,] 8 NA 10 NA
[68,] 9 NA 10 NA
[69,] 10 NA 10 NA
[70,] 11 NA 10 NA
[71,] 12 NA 10 NA
[72,] 13 NA 10 NA
[73,] 14 NA 10 NA
[74,] 15 NA 10 NA
[75,] 16 NA 10 NA
[76,] 17 NA 10 NA
[77,] 18 NA 10 NA
[78,] 19 NA 10 NA
[79,] 20 NA 10 NA
[80,] 21 NA 10 NA
[81,] 22 NA 10 NA
[82,] 23 NA 10 NA
[83,] 24 NA 10 NA
[84,] 25 NA 10 NA
[85,] 26 NA 10 NA
[86,] 27 NA 10 NA
[87,] 28 NA 10 NA
[88,] 29 NA 10 NA
[89,] 30 NA 10 NA
[90,] 31 NA 10 NA
[91,] 32 NA 10 NA
[92,] 33 NA 10 NA
[93,] 34 NA 10 NA
[94,] 35 NA 10 NA
[95,] 36 NA 10 NA
[96,] 37 NA 10 NA
[97,] 38 NA 10 NA
[98,] 39 NA 10 NA
[99,] 40 NA 10 NA
[100,] 41 NA 10 NA
[101,] 42 NA 10 NA
[102,] 43 NA 10 NA
[103,] 44 NA 10 NA
[104,] 45 NA 10 NA
[105,] 46 NA 10 NA
[106,] 47 NA 10 NA
[107,] 48 NA 10 NA
[108,] 49 NA 10 NA
[109,] 50 NA 10 NA
[110,] 51 NA 10 NA
[111,] 52 NA 10 NA
[112,] 53 NA 10 NA
[113,] 54 NA 10 NA
[114,] 55 NA 10 NA
[115,] 56 NA 10 NA
[116,] 57 NA 10 NA
[117,] 58 NA 10 NA
[118,] 59 NA 10 NA
[119,] 0 NA 11 NA
[120,] 1 NA 11 NA
[121,] 2 NA 11 NA
[122,] 3 NA 11 NA
[123,] 4 NA 11 NA
[124,] 5 NA 11 NA
[125,] 6 NA 11 NA
[126,] 7 NA 11 NA
[127,] 8 NA 11 NA
[128,] 9 NA 11 NA
[129,] 10 NA 11 NA
[130,] 11 NA 11 NA
[131,] 12 NA 11 NA
[132,] 13 NA 11 NA
[133,] 14 NA 11 NA
[134,] 15 NA 11 NA
[135,] 16 NA 11 NA
[136,] 17 NA 11 NA
[137,] 18 NA 11 NA
[138,] 19 NA 11 NA
[139,] 20 NA 11 NA
[140,] 21 NA 11 NA
[141,] 22 NA 11 NA
[142,] 23 NA 11 NA
[143,] 24 NA 11 NA
[144,] 25 NA 11 NA
[145,] 26 NA 11 NA
[146,] 27 NA 11 NA
[147,] 28 NA 11 NA
[148,] 29 NA 11 NA
[149,] 30 NA 11 NA
[150,] 31 NA 11 NA
[151,] 32 NA 11 NA
[152,] 33 NA 11 NA
[153,] 34 NA 11 NA
[154,] 35 NA 11 NA
[155,] 36 NA 11 NA
[156,] 37 NA 11 NA
[157,] 38 NA 11 NA
[158,] 39 NA 11 NA
[159,] 40 NA 11 NA
[160,] 41 NA 11 NA
[161,] 42 NA 11 NA
[162,] 43 NA 11 NA
[163,] 44 NA 11 NA
[164,] 45 NA 11 NA
[165,] 46 NA 11 NA
[166,] 47 NA 11 NA
[167,] 48 NA 11 NA
[168,] 49 NA 11 NA
[169,] 50 NA 11 NA
[170,] 51 NA 11 NA
[171,] 52 NA 11 NA
[172,] 53 NA 11 NA
[173,] 54 NA 11 NA
[174,] 55 NA 11 NA
[175,] 56 NA 11 NA
[176,] 57 NA 11 NA
[177,] 58 NA 11 NA
[178,] 59 NA 11 NA
From where to where should the intervals go? Is the first interval for 5min from 0 to 4.99 min? If so, how about this:
res <- cbind(min1 = minute(m1) ,
min5 = (trunc(minute(m1) / 5) + 1) * 5,
hour1 = hour(m1),
hour6 = (trunc(hour(m1)/ 6) + 1) * 6)
Giving:
min1 min5 hour1 hour6
[1,] 0 5 9 12
[2,] 1 5 9 12
[3,] 2 5 9 12
[4,] 3 5 9 12
[5,] 4 5 9 12
[6,] 5 10 9 12
[7,] 6 10 9 12
[8,] 7 10 9 12
[9,] 8 10 9 12
[10,] 9 10 9 12
[11,] 10 15 9 12
[12,] 11 15 9 12
[13,] 12 15 9 12
[14,] 13 15 9 12
[15,] 14 15 9 12
[16,] 15 20 9 12
[17,] 16 20 9 12
[18,] 17 20 9 12
[19,] 18 20 9 12
[20,] 19 20 9 12
[21,] 20 25 9 12
[22,] 21 25 9 12
[23,] 22 25 9 12
[24,] 23 25 9 12
[25,] 24 25 9 12
[26,] 25 30 9 12
[27,] 26 30 9 12
[28,] 27 30 9 12
[29,] 28 30 9 12
[30,] 29 30 9 12
Alternatively just use cut
and define your intervals like you want:
res <- cbind(min1 = minute(m1) ,
min5 = as.numeric(cut(minute(m1), seq(0, 60, 5), include.lowest = T)) * 5,
hour1 = hour(m1),
hour6 = as.numeric(cut(hour(m1), seq(0, 24, 6), include.lowest = T)) * 6)
min1 min5 hour1 hour6
[1,] 0 5 9 12
[2,] 1 5 9 12
[3,] 2 5 9 12
[4,] 3 5 9 12
[5,] 4 5 9 12
[6,] 5 5 9 12
[7,] 6 10 9 12
[8,] 7 10 9 12
[9,] 8 10 9 12
[10,] 9 10 9 12
[11,] 10 10 9 12
[12,] 11 15 9 12
[13,] 12 15 9 12
[14,] 13 15 9 12
[15,] 14 15 9 12
[16,] 15 15 9 12
[17,] 16 20 9 12
[18,] 17 20 9 12
[19,] 18 20 9 12
[20,] 19 20 9 12
[21,] 20 20 9 12
[22,] 21 25 9 12
[23,] 22 25 9 12
[24,] 23 25 9 12
[25,] 24 25 9 12
[26,] 25 25 9 12
[27,] 26 30 9 12
[28,] 27 30 9 12
[29,] 28 30 9 12
[30,] 29 30 9 12