R语言 如何从时间向量中提取自定义间隔

9njqaruj  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(95)

我有一个间隔为一分钟的向量。

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"

我可以用lubridate包得到一些间隔

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

但是我怎么才能得到向量比如说5或15分钟,或者6或12小时
就像这样

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
mwngjboj

mwngjboj1#

从哪里到哪里的间隔应该去?是从0到4.99分钟的第一个间隔5分钟?如果是这样的话,怎么样:

res <- cbind(min1  = minute(m1) ,
             min5  = (trunc(minute(m1) / 5) + 1) * 5,
             hour1 = hour(m1),
             hour6 = (trunc(hour(m1)/ 6) + 1) * 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   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

或者,只需使用cut并按照您想要的方式定义间隔:

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

相关问题