r - 使用 R 创建包含基于日期时间的连续计数的向量
问题描述
我在 R 中有一个数据框,如下所示...
Year Month Day Hour DateTime
1950 1 4 12 1/4/1950 12:00
1950 1 4 13 1/4/1950 13:00
1950 1 4 14 1/4/1950 14:00
1950 1 4 15 1/4/1950 15:00
1950 1 4 18 1/4/1950 18:00
1950 1 4 21 1/4/1950 21:00
1950 1 4 22 1/4/1950 22:00
1950 1 5 23 1/5/1950 23:00
数据从年(1950-2017)开始,月(1-12)天(1-31)小时(0-23),我想创建一个向量来总结连续的观察,即观察紧随其后。例如,创建的列向量中的前几个数字应该是(4,1,3),因为前四个观测值是连续的,接下来不是,那么接下来的三个是连续的。
解决方案
我们用 来检查相邻日期之间的差异difftime
,检查差异是否不等于 1,用于rle
获取计数
dt <- as.POSIXct(df1$DateTime, format = "%m/%d/%Y %H:%M")
rle(cumsum(c(TRUE, difftime(dt[-1], dt[-length(dt)], unit = "hour") != 1)))$lengths
#[1] 4 1 2 1
或者正如@Ryan 提到的,diff
也可以使用
rle(cumsum(c(TRUE, diff(dt, unit = "hour") != 1)))$lengths
数据
df1 <- structure(list(Year = c(1950L, 1950L, 1950L, 1950L, 1950L, 1950L,
1950L, 1950L), Month = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Day = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 5L), Hour = c(12L, 13L, 14L, 15L, 18L,
21L, 22L, 23L), DateTime = c("1/4/1950 12:00", "1/4/1950 13:00",
"1/4/1950 14:00", "1/4/1950 15:00", "1/4/1950 18:00", "1/4/1950 21:00",
"1/4/1950 22:00", "1/5/1950 23:00")), class = "data.frame", row.names = c(NA,
-8L))
推荐阅读
- android - 在没有互联网连接的情况下查询购买
- python - nums[:] = nums[::-1] 和 nums = nums[::-1] 的区别
- caching - 使用 Redis 缓存 rss 提要 - 几 kb 到几 MB
- flutter - DART:如何在单击按钮以显示在下一页上时随机生成六 (6) 位数字?
- python - 如何在这个开源手风琴中放置垂直滚动条?
- vba - 在组合框更新控件后运行 AfterUpdate
- asp.net - 在任何 gridview 事件中,asp.net 中的排序都会丢失
- python - 通过vscode的SSH隧道打开一个Matplotlib图
- python - 从 python 创建容器时,Docker API 无法识别“npipe”挂载类型
- firebase - 如何使用来自 Firebase 存储的图片设置图像视图