这是我的第一篇文章,请耐心等待。
我的数据帧来自高频浮标,在湖中的离散深度进行测量。
library(rLakeAnalyzer)
library(tidyverse)
library(plyr)
PFL_counter = c(2,2,2,3,3,3,4,4)
depth = c(0.5,1.0,1.5,0.5,1.0,1.5,0.5,1.0)
temp_C = c(14.27,14.22,14.20,14.23,14.23,14.22,14.23,14.22)
datetime = c("5/11/23 17:01","5/11/23 17:02","5/11/23 17:04",
"5/11/23 18:01","5/11/23 18:22","5/11/23 19:14",
"5/11/23 19:14","5/11/23 19:16")
Carmi_23 = data.frame(PFL_counter, depth ,temp_C, datetime)
Carmi_23$datetime = mdy_hm(Carmi_23$datetime)
Carmi_23
实际数据有 58522 个观测值,深度从 0.5 到 9 MAX(例如有时只会到 7),计数器正在计算迄今为止进行的深度剖面的数量(从 2 到 272),以及温度测量值制作〜1-3分钟。
每小时应有 1 个深度剖面。我的目标是将每个日期时间的深度剖面四舍五入到小时(您可以将其视为其 PFL_counter 组)。像这样:
PFL_counter = c(2,2,2,3,3,3,4,4)
depth = c(0.5,1.0,1.5,0.5,1.0,1.5,0.5,1.0)
temp_C = c(14.27,14.22,14.20,14.23,14.23,14.22,14.23,14.22)
datetime = c("5/11/23 17:00","5/11/23 17:00","5/11/23 17:00",
"5/11/23 18:00","5/11/23 18:00","5/11/23 18:00",
"5/11/23 19:00","5/11/23 19:00")
Carmi_23 = data.frame(PFL_counter, depth ,temp_C, datetime)
Carmi_23$datetime = mdy_hm(Carmi_23$datetime)
Carmi_23
问题是,对于某些深度剖面,需要一个多小时才能完成测量,因此最后几个深度与剖面开始时(0.5 深度)不在同一小时内。上面第 6 行第一个代码块中的示例。
我的第一个方法(在我意识到深度剖面有时需要一个多小时之前):
Carmi_23$datetime = floor_date(Carmi_23$datetime, "hour") # tried this
Carmi_23$datetime = round_date(Carmi_23$datetime, "10 mins") # also this
Carmi_23$datetime = floor_date(Carmi_23$datetime, "hour")
当我需要pivot_wider时,这会成为一个问题,因为这样我一个小时会得到半行,另一个小时会得到半行(而且我无法为rLakeAnalyzer热图提供NA)。在示例数据中:
testingpivot = Carmi_23 %>%
select(datetime=datetime, depth=depth, temp_C=temp_C) %>%
pivot_wider(id_cols=datetime,
names_from=depth,
values_from=temp_C,
values_fn=function(x) mean(x, na.rm=TRUE)
) %>%
rename_with(~ paste0("wtr_", .), -datetime)
#%>% na.omit() leave until figured out
testingpivot
我还参观了图书馆(露天)
library(openair)
Carmi_23$date = Carmi_23$datetime
Carmi_openair = timeAverage(Carmi_23, avg.time = "hour", type = "PFL_counter") # datetime needs to be called "date"
但是这会平均所有列值,以便时间被折叠成平均每小时一行......我的下一个尝试是尝试分组、平均值和总结,但关键是我需要对深度剖面内的所有深度重复日期时间。
有人有什么想法吗?我可以在旋转后省略行,因为这使得时间被分成两半,但我内心非常顽固的一部分想弄清楚它。
谢谢!
floor_date()
将起作用。如果它们是字符格式,那么您可以使用库
dmy_hm()
中的
lubridate
解析它们,然后对其应用
floor_date()
。
a <- as.POSIXct("5/11/23 17:01", format="%d/%m/%Y %H:%M")
floor_date(a, unit = "hour")
a <- as.character("5/11/23 17:01")
dmy_hm(a)
floor_date(dmy_hm(a), unit = "hour")