You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按不同长度的PFL_counter组将datetime列取整到小时?

湖泊浮标深度剖面数据的时间统一取整方案

问题背景

有58522条湖泊高频浮标深度剖面测量数据,数据框包含PFL_counter(深度剖面计数器)、depth、temp_C和datetime列,每组剖面的深度行数不固定。需要将每个PFL_counter组的所有datetime值统一取整到该剖面起始时间对应的小时,但遇到两个问题:

  • 部分剖面耗时超过1小时,单组内datetime跨小时,直接用floor_date会让同组出现不同小时的时间,后续pivot_wider操作会产生NA值
  • 使用openair::timeAverage会聚合数据,丢失原始深度与温度的对应关系,不符合需求

解决方案

核心思路是按剖面分组后,提取每组的最早时间作为剖面起始时间,对这个起始时间取整到小时,再将整组的datetime替换为这个统一的取整后时间,既保留所有原始数据,又保证同组时间一致。

代码实现

# 加载所需工具包(优先用dplyr,避免与plyr冲突)
library(rLakeAnalyzer)
library(tidyverse)

# 用户提供的示例数据
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_processed <- Carmi_23 %>%
  group_by(PFL_counter) %>%
  # 提取组内最早时间并取整到小时,替换整组的datetime
  mutate(datetime = floor_date(min(datetime), unit = "hour")) %>%
  ungroup()

# 查看处理后的数据
print(Carmi_23_processed)

代码说明

  • group_by(PFL_counter):将数据按每个深度剖面分组
  • min(datetime):获取当前剖面的起始时间(组内最早的记录时间)
  • floor_date(..., unit = "hour"):把起始时间取整到最近的小时
  • mutate(datetime = ...):将整组的datetime统一替换为这个取整后的时间,确保同剖面所有深度记录的时间完全一致
  • 处理后的数据可直接用于pivot_wider操作,不会出现跨小时导致的NA,同时完整保留了原始的深度-温度对应关系

内容的提问来源于stack exchange,提问作者Maria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:34:54