r - 如何按顺序添加行值一定次数并填充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 中的某个地方,因为它非常基本)。
解决方案
您可以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
推荐阅读
- ajax - 动态形式 Symfony 的约束违反
- windows-installer - 应用 MSP 补丁时缺少功能
- python - Spyder中的截断输出
- python - 如何在执行程序时修复此错误
- android - 创建后无法立即获取firebase用户
- python - 在python中以二进制形式访问系统输入
- python - 如何获得旧的 matplotlib 1.5.1 版界面?
- google-apps-script - Google Scripts getFiles(),返回什么顺序?
- ssl - 配置 Traefik TLS 时出错“为入口密钥配置 TLS 时出错”不存在
- excel - 从 ODBC 导入时抑制消息“正在获取数据...”?