对于导入的数据集,时间序列甚至不会在半小时内中断
Time series breaks not even on the half hour for an imported dataset
我一直在进行一些分析,为了方便起见,我一直将数据分组为半小时平均组,因为数据分辨率非常好(每 2 分钟一次,持续几个月)。
数据导入如下:
unq_id dat_tim sens_hgt leaf_temp_c
1 5/18/17 10:22 2 29.82043
2 5/18/17 10:24 2 32.27954
3 5/18/17 10:26 2 32.48996
4 5/18/17 10:28 2 31.81604
5 5/18/17 10:30 2 31.56943
问题是,当我添加半小时休息时间 class 时,休息时间是基于第一次日期时间测量的半小时增量。使用的代码:
leaf_temp_df <- read.csv("leaf_master.csv",header = TRUE, sep = ",")
leaf_temp_df$halfhour <- cut(as.POSIXct(paste(leaf_temp_df$dat_tim),
format = "%m/%d/%y %H:%M"), breaks = "30 min")
输出:
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 5/18/17 10:22 2 29.82043 2017-05-18 10:22:00
2 5/18/17 10:24 2 32.27954 2017-05-18 10:22:00
3 5/18/17 10:26 2 32.48996 2017-05-18 10:22:00
4 5/18/17 10:28 2 31.81604 2017-05-18 10:22:00
5 5/18/17 10:30 2 31.56943 2017-05-18 10:22:00
输出遵循该模式,直到到达 10:52:00
的下一个中断点
我希望半小时矢量在半小时(例如 10:30:00 和 11:00:00)上是偶数,以实现不同数据类型之间的兼容性。为了解决这个问题,我尝试跳过前四行数据,使 unq_id = 5 成为从 10:30 开始读取的第一行。
leaf_temp_df <- read.csv("leaf_master.csv", header = TRUE, sep = ",")[-c(1:4),]
这仍然存在从 10:22 开始的半小时休息的相同问题。我什至尝试编辑主数据文件并从文件中删除第 1-4 行,以使中断能够在偶数半小时 (10:30) 读取第一个日期时间,但 10:22 问题仍然存在出现了。
您可以使用 lubridate 包中的 floor_date
将分钟四舍五入到最接近的 30 分钟。
library(dplyr)
library(lubridate)
df1 %>%
mutate(dat_tim = mdy_hm(df1$dat_tim), # format dat_tim, remove if dat_tim is already in date time format
halfhour = floor_date(dat_tim, unit = "30 mins"))
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 1 2017-05-18 10:22:00 2 29.82043 2017-05-18 10:00:00
2 2 2017-05-18 10:24:00 2 32.27954 2017-05-18 10:00:00
3 3 2017-05-18 10:26:00 2 32.48996 2017-05-18 10:00:00
4 4 2017-05-18 10:28:00 2 31.81604 2017-05-18 10:00:00
5 5 2017-05-18 10:30:00 2 31.56943 2017-05-18 10:30:00
数据:
df1 <- structure(list(unq_id = 1:5, dat_tim = c("5/18/17 10:22", "5/18/17 10:24",
"5/18/17 10:26", "5/18/17 10:28", "5/18/17 10:30"), sens_hgt = c(2L,
2L, 2L, 2L, 2L), leaf_temp_c = c(29.82043, 32.27954, 32.48996,
31.81604, 31.56943)), class = "data.frame", row.names = c(NA,
-5L))
我更喜欢lubridate::floor_date
:
library(lubridate)
df$dat_tim <- mdy_hm(df$dat_tim)
df$halfhour <- floor_date(df$dat_tim, "30 minutes")
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 5/18/17 2017-05-18 10:22:00 2 29.82043 2017-05-18 10:00:00
2 5/18/17 2017-05-18 10:24:00 2 32.27954 2017-05-18 10:00:00
3 5/18/17 2017-05-18 10:26:00 2 32.48996 2017-05-18 10:00:00
4 5/18/17 2017-05-18 10:28:00 2 31.81604 2017-05-18 10:00:00
5 5/18/17 2017-05-18 10:30:00 2 31.56943 2017-05-18 10:30:00
我一直在进行一些分析,为了方便起见,我一直将数据分组为半小时平均组,因为数据分辨率非常好(每 2 分钟一次,持续几个月)。
数据导入如下:
unq_id dat_tim sens_hgt leaf_temp_c
1 5/18/17 10:22 2 29.82043
2 5/18/17 10:24 2 32.27954
3 5/18/17 10:26 2 32.48996
4 5/18/17 10:28 2 31.81604
5 5/18/17 10:30 2 31.56943
问题是,当我添加半小时休息时间 class 时,休息时间是基于第一次日期时间测量的半小时增量。使用的代码:
leaf_temp_df <- read.csv("leaf_master.csv",header = TRUE, sep = ",")
leaf_temp_df$halfhour <- cut(as.POSIXct(paste(leaf_temp_df$dat_tim),
format = "%m/%d/%y %H:%M"), breaks = "30 min")
输出:
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 5/18/17 10:22 2 29.82043 2017-05-18 10:22:00
2 5/18/17 10:24 2 32.27954 2017-05-18 10:22:00
3 5/18/17 10:26 2 32.48996 2017-05-18 10:22:00
4 5/18/17 10:28 2 31.81604 2017-05-18 10:22:00
5 5/18/17 10:30 2 31.56943 2017-05-18 10:22:00
输出遵循该模式,直到到达 10:52:00
的下一个中断点我希望半小时矢量在半小时(例如 10:30:00 和 11:00:00)上是偶数,以实现不同数据类型之间的兼容性。为了解决这个问题,我尝试跳过前四行数据,使 unq_id = 5 成为从 10:30 开始读取的第一行。
leaf_temp_df <- read.csv("leaf_master.csv", header = TRUE, sep = ",")[-c(1:4),]
这仍然存在从 10:22 开始的半小时休息的相同问题。我什至尝试编辑主数据文件并从文件中删除第 1-4 行,以使中断能够在偶数半小时 (10:30) 读取第一个日期时间,但 10:22 问题仍然存在出现了。
您可以使用 lubridate 包中的 floor_date
将分钟四舍五入到最接近的 30 分钟。
library(dplyr)
library(lubridate)
df1 %>%
mutate(dat_tim = mdy_hm(df1$dat_tim), # format dat_tim, remove if dat_tim is already in date time format
halfhour = floor_date(dat_tim, unit = "30 mins"))
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 1 2017-05-18 10:22:00 2 29.82043 2017-05-18 10:00:00
2 2 2017-05-18 10:24:00 2 32.27954 2017-05-18 10:00:00
3 3 2017-05-18 10:26:00 2 32.48996 2017-05-18 10:00:00
4 4 2017-05-18 10:28:00 2 31.81604 2017-05-18 10:00:00
5 5 2017-05-18 10:30:00 2 31.56943 2017-05-18 10:30:00
数据:
df1 <- structure(list(unq_id = 1:5, dat_tim = c("5/18/17 10:22", "5/18/17 10:24",
"5/18/17 10:26", "5/18/17 10:28", "5/18/17 10:30"), sens_hgt = c(2L,
2L, 2L, 2L, 2L), leaf_temp_c = c(29.82043, 32.27954, 32.48996,
31.81604, 31.56943)), class = "data.frame", row.names = c(NA,
-5L))
我更喜欢lubridate::floor_date
:
library(lubridate)
df$dat_tim <- mdy_hm(df$dat_tim)
df$halfhour <- floor_date(df$dat_tim, "30 minutes")
unq_id dat_tim sens_hgt leaf_temp_c halfhour
1 5/18/17 2017-05-18 10:22:00 2 29.82043 2017-05-18 10:00:00
2 5/18/17 2017-05-18 10:24:00 2 32.27954 2017-05-18 10:00:00
3 5/18/17 2017-05-18 10:26:00 2 32.48996 2017-05-18 10:00:00
4 5/18/17 2017-05-18 10:28:00 2 31.81604 2017-05-18 10:00:00
5 5/18/17 2017-05-18 10:30:00 2 31.56943 2017-05-18 10:30:00