r - 是否有 R 函数以 15 秒的间隔过滤数据集?
问题描述
我正在尝试过滤深度数据和相应日期的数据集。Time 列是 POSIXct format = "%Y%m%d%H%M%S"
。这就是我的数据的样子:
Depth Time
0.1 2018-06-24 01:26:40
0.2 2018-06-24 01:26:41
0.2 2018-06-24 01:26:56
0.1 2018-06-24 01:26:57
0.1 2018-06-24 01:26:58
0.1 2018-06-24 01:26:59
0.1 2018-06-24 01:27:14
0.1 2018-06-24 01:27:15
0.1 2018-06-24 01:27:16
0.1 2018-06-24 01:27:17
0.1 2018-06-24 01:27:30
我想创建一个包含相同数据的数据框,但每 15 秒只有一个新条目。我的数据有时是连续的,有时记录的时间有间隙。
这将是我想要的输出:
深度时间
0.2 2018-06-24 01:26:41
0.2 2018-06-24 01:26:56
0.1 2018-06-24 01:27:14
0.1 2018-06-24 01:27:30
我尝试使用适用于连续数据集部分的行之间的时间差:
dt_filter <- d_cor %>%
mutate(diff = Time - lag(Time, default = first(Time)))
if ((dt_filter$diff < 2) ) {
dt_filter_1 <- dt_filter[seq(1, nrow(dt_filter), 15), ]
}
但是一旦我尝试添加不连续的那些,这给了我一个问题:
dt_filter_15 <- dt_filter %>%
filter(diff >= 15 )
从那时起,我并不总是有 15 秒的间隔,而且显然没有将它们计算在内。
到目前为止,我找不到能够过滤我的时间列的函数。我对 R 很陌生,所以不太熟悉编写自己的循环,我认为这是必要的……而且时间数据并没有让它变得更容易。
谢谢你的帮助!
编辑
@Ben 感谢您的快速回复!
这是我得到的一些输出:
Depth Time diff cumdiff x
0.1 2018-06-23 23:59:44 1 1030 0
0.0 2018-06-24 00:01:02 78 1035 5
0.0 2018-06-24 00:01:03 1 1036 1
最后两行之间只有 1s 的差异,但它仍然添加到 cumdiff 并因此计入 x 列
解决方案
感谢您的链接,我发现该功能似乎运行良好 - 以防万一有人有同样的问题:
issecsApart <- function(d_cor) {
secs <- 0
keeps <- c()
for (d in d_cor) {
if (d >= secs + 15) {
secs <- d
keeps <- c(keeps, TRUE)
} else {
keeps <- c(keeps, FALSE)
}
}
keeps
}
d_cor2 <- d_cor %>%
arrange(Time) %>%
filter(issecsApart(Time))
感谢您的所有帮助!
推荐阅读
- reactjs - React-map-gl 动态 geoJson 文件导致错误 414 - URI 太长
- javascript - Microsoft Edge 中的语音识别 API(未定义)
- css - R Shiny中按索引号样式元素
- performance - 其中并发读/写操作的数据库策略
- debugging - 反汇编代码是崩溃同化的准确选择吗?
- ios - 我需要在 init(coder) 和 init(size) 中注入属性吗?
- php - 如何将 2 个按钮链接到同一页面上的 2 个单独的 php 代码?
- sharepoint-online - 如何使用 sp.web (SPFX) 获取文档库中文件的 URL
- c++ - 输出不是我所期望的
- laravel - 单击按钮后输入值不保持值