我还是 R 的新手。我可以在 SQL 服务器管理中按分区查询选择每小时的第一行。我从我的程序中发现了一个非常大的问题,它sqlQuery()
在 R 中使用函数需要很长时间,并且在运行我闪亮的 Web 应用程序时需要更长时间。一种减少花费时间的经过测试的方法是查询所有数据并更快地在 R 中准备数据。
所以这是我的示例数据:
Date Val
1 2017-06-11 04:00:02 83
2 2017-06-11 04:01:02 77
3 2017-06-11 04:03:01 78
..
4 2017-05-11 05:00:03 83
5 2017-05-11 05:01:02 95
6 2017-05-11 05:02:02 10
..
7 2017-05-11 06:01:00 29
8 2017-05-11 06:02:02 39
9 2017-05-11 06:03:03 85
10 2017-05-11 06:04:02 71
..
11 2017-05-11 07:05:02 33
12 2017-05-11 07:06:02 14
.. (many rows)
13 2017-05-12 00:01:01 20
14 2017-05-12 00:03:01 45
有时在一小时内会丢失行。我的问题是如何仅过滤每小时一分钟的分钟行。
我的示例输出:
Date Val
1 2017-05-11 04:00:02 83
4 2017-05-11 05:00:03 83
7 2017-05-11 06:01:00 29
11 2017-05-11 07:05:02 33
13 2017-05-12 00:01:01 20
任何想法请帮助。非常感谢。
您可以使用lubridate
和dplyr
来转换日期,提取日期和小时,然后按日期过滤一小时内的最短时间。我把你的 6 月 31 日更改为 6 月 30 日:)
library(dplyr)
library(lubridate)
dataset %>%
mutate(Date = ymd_hms(Date), dt = as_date(Date), hr = hour(Date)) %>%
group_by(dt, hr) %>%
filter(Date == min(Date)) %>%
ungroup() %>%
select(Date, Val)
Date Val
<dttm> <int>
1 2017-06-30 04:00:02 83
2 2017-05-11 05:00:03 83
3 2017-05-11 06:01:00 29
4 2017-05-11 07:05:02 33
5 2017-05-12 00:01:01 20
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句