我在Access数据库中有3个表,它们具有相同的列名(TempDate
和Temp
),但时间戳不同。每隔10分钟收集一次数据,但是每个记录设备的开始时间都不同。我想将这些合并到一个表中,每个表具有一个TempDate和一个Temp列(temp1,temp2,temp3)。
我需要有关如何在Access或R中执行此操作的帮助。我已经开始将R与MySQL代码一起使用,但是我仍然很新。提前致谢。最终,我想将此数据与具有相同日期范围的datetime时间戳一起连接到另一个数据框。如果有人可以告诉我如何告诉我如何按间隔分组,我想我可以解决。然后最后使用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)。我也在TempDate+60
cut函数中进行了尝试,但是某些日期将在接下来的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)
在R中,您可以使用tidyverse
方法执行以下操作。
首先,您可以bind_rows
用来将所有数据框放在一起,并添加source
带有这些温度来自的数据框名称的列,或在最终结果中添加目标列。
然后,确保您TempDate
是POSIXct
。您可以cut
用来将日期时间间隔设置为10分钟。
在这一点上,我考虑将结果保留为用绘制ggplot2
。通常最好采用“长”格式而不是“宽”格式。但是,如果您希望使用“宽”格式,则可以使用pivot_wider
from tidyr
。
library(dplyr)
library(tidyr)
bind_rows(temp1 = temp1, temp2 = temp2, temp3 = temp3, .id = 'source') %>%
mutate(TempDate = as.POSIXct(TempDate),
NewTempDate = cut(TempDate, breaks = "10 min")) %>%
pivot_wider(id_cols = NewTempDate, names_from = source, values_from = Temperature)
输出量
NewTempDate temp1 temp2 temp3
<fct> <dbl> <dbl> <dbl>
1 2020-08-11 07:10:00 1.61 15.6 2.06
2 2020-08-11 07:20:00 -1.90 15.6 3.57
3 2020-08-11 07:30:00 -1.90 15.6 4.08
4 2020-08-11 07:40:00 -0.901 15.6 4.58
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句