首页 > 解决方案 > 如何按顺序添加行值一定次数并填充R中的每一行?

问题描述

我一直在尝试使用 R 来清理一些数据。我的数据集如下所示:

DateTime             Day ...
2018-10-01 10:00:00  0
2018-10-01 10:00:05  0
2018-10-01 10:00:10  0
2018-10-01 10:00:15  0
2018-10-01 10:00:20  0
2018-10-01 10:00:25  0
2018-10-01 10:00:30  0
2018-10-01 10:00:35  0

它在 5 秒的垃圾箱中,所以 24 小时 = 17280 个垃圾箱。我正在尝试添加一个Day列,该列基本上只是给出一个从开头开始的值,1并计算到 24 小时,并给出'1,1,1,1,1...1'第 1 天和'2,2,2,2,2...2'10:00:00第 2 天开始的每一天,并一直遍历每个数据集。

所以我想要的输出看起来像这样:

DateTime             Day 
2018-10-01 10:00:00  1
2018-10-01 10:00:05  1
2018-10-01 10:00:10  1
2018-10-01 10:00:15  1
...        ...       ...
2018-10-02 9:59:50   1
2018-10-02 9:59:55   1
2018-10-02 10:00:00  2  
2018-10-02 10:00:05  2
...        ...       ...
2018-10-03 9:59:50   2
2018-10-03 9:59:55   2
2018-10-03 10:00:00  3  
2018-10-03 10:00:05  3

为此,我想出了一个代码来创建一个数字向量rep()

days<- round(nrow(df)/17280)
sdays <- rep(1:days, each = 17280, times = 1)
df$Day <- sdays

如果日期与 24 小时的白天长度完全匹配并且我不需要向下或向上舍入,则此方法有效。但是,并不是我正在经历的每个数据集都有完美的 24 小时日期范围,我不喜欢编辑数据,因为每个 bin 对于我正在查看的内容都是必要的。因此,我一直在尝试为此找出一种更合适的方法,但收效甚微(尽管我确信它在 www 中的某个地方,因为它非常基本)。

标签: rdataframeincrementseqrepeat

解决方案


您可以cut() date通过24 hours

数据

dat <- data.frame(
  Date = seq(ISOdatetime(2018, 10, 01, 10, 0, 0, "GMT"), 
             ISOdatetime(2018, 10, 03, 10, 0, 5, "GMT"),
             by = 5
             ))

将日期缩短 24 小时

dat$Day <- cut(dat$Date, "24 hours", F)

输出

head(dat, 4)

dat[(nrow(dat) %/% 2 - 2):(nrow(dat) %/% 2 + 1), ]

tail(dat, 4)

                 Date Day
    1 2018-10-01 10:00:00   1
    2 2018-10-01 10:00:05   1
    3 2018-10-01 10:00:10   1
    4 2018-10-01 10:00:15   1
      .......................
17279 2018-10-02 09:59:50   1
17280 2018-10-02 09:59:55   1
17281 2018-10-02 10:00:00   2
17282 2018-10-02 10:00:05   2
      .......................
34559 2018-10-03 09:59:50   2
34560 2018-10-03 09:59:55   2
34561 2018-10-03 10:00:00   3
34562 2018-10-03 10:00:05   3

推荐阅读