【发布时间】:2020-11-26 12:47:04
【问题描述】:
我在 Access 数据库中有 3 个表具有相同的列名(TempDate 和 Temp),但时间戳不同。数据以 10 分钟的间隔收集,但每个记录设备都有不同的开始时间。我想将这些合并到一个表中,每个表都有一个 TempDate 和一个 Temp 列(temp1、temp2、temp3)。
我需要有关如何在 Access 或 R 中执行此操作的帮助。我已经开始将 R 与 MySQL 代码一起使用,但我还是很陌生。提前致谢。最终,我想将这些数据加入到另一个数据帧中,并带有来自同一时期的日期时间戳。如果有人可以告诉我如何告诉它按间隔分组,我想我可以做到这一点。然后最后使用 ggplot 绘图
数据
temp1<-data.frame(TempDate=c("2020/08/11 07:13:01","2020/08/11 07:23:01","2020/08/11 07:33:01","2020/08/11 07:43:01"),Temperature=c(1.610,-1.905,-1.905,-0.901))
temp2<-data.frame(TempDate=c("2020/08/11 07:10:01","2020/08/11 07:20:01","2020/08/11 07:30:01","2020/08/11 07:40:01"),Temperature=c(15.641,15.641,15.641,15.641))
temp3<-data.frame(TempDate=c("2020/08/11 07:19:01","2020/08/11 07:29:01","2020/08/11 07:39:01","2020/08/11 07:49:01"),Temperature=c(2.062,3.573,4.076,4.579))
> temp3 #as example
TempDate Temperature
1 2020/08/11 07:19:01 2.062
2 2020/08/11 07:29:01 3.573
3 2020/08/11 07:39:01 4.076
4 2020/08/11 07:49:01 4.579
#what I want row 1 is temps recorded from 07:10:00-07:29:59, etc
>
TempDate Temp1 Temp2 Temp3
1 2020/08/11 07:10:00 1.610 15.641 2.062
2 2020/08/11 07:20:00 -1.905 15.641 3.573
3 2020/08/11 07:30:00 -1.905 15.641 4.076
4 2020/08/11 07:40:00 -1.901 15.641 4.579
更新:
感谢 Ben 的出色回答让我开始解决这个问题。在提出另一个问题时,建议使用floor_date。这段代码比@Ben 的 cut 函数更适合我的数据。使用 cut 时,我会得到以 9 (12:19) 而不是 0 (12:10) 结尾的时间。我还在 cut 函数中尝试了TempDate+60,但随后某些日期会在接下来的 10 分钟间隔内获得时间。下面的代码更准确。
library(lubridate)
tempdata<-bind_rows(burrow=burrow,shade=shade,sun=sun,.id='Series') %>%
mutate(TempDate = as.POSIXct(TempDate, tz="UTC"),
TimeStamp = floor_date(TempDate, unit='10 mins'),
TimeStamp = as.POSIXct(TimeStamp, tz="UTC")) %>%
filter(TimeStamp > as.POSIXct("2020-08-12 13:29:00", tz="UTC")) %>%
select(Series, Temperature,TimeStamp) %>%
arrange(TimeStamp)
【问题讨论】:
标签: mysql r ms-access nstimeinterval