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

如何用最接近午夜的有效值替换时间序列数据框中的NA值?

问题描述

我有一个按时间排序的数据框:

df1 <- read.table(text = "DT   odczyt.1
'2023-08-16 00:00:00'   482
'2023-08-16 23:55:00'   483
'2023-08-17 00:00:00'   484
'2023-08-17 23:59:45'   485
'2023-08-18 00:00:00'   486
'2023-08-18 23:50:45'   487
'2023-08-19 00:00:00'   NA
'2023-08-19 00:00:45'   NA
'2023-08-19 00:01:00'   NA
'2023-08-19 00:01:15'   489
'2023-08-19 23:59:30'   490
'2023-08-19 23:59:45'   NA
'2023-08-20 00:00:00'   NA
'2023-08-20 00:03:00'   NA
'2023-08-20 00:04:15'   NA
'2023-08-20 00:07:00'   492
'2023-08-20 23:59:45'   493
'2023-08-21 00:00:00'   NA
'2023-08-21 07:00:30'   493
'2023-08-21 13:21:45'   495", header = TRUE)

部分日期的午夜(00:00:00)对应的odczyt.1值为NA,需要用该日期内最接近午夜的有效值替换这些NA(有效值可能在午夜之前或之后),同时保留数据框的最后一行。期望输出如下:

> df1.r
                   DT odczyt.1
1 2023-08-16 00:00:00      482
2 2023-08-17 00:00:00      484
3 2023-08-18 00:00:00      486
4 2023-08-19 00:00:00      489
5 2023-08-20 00:00:00      490
6 2023-08-21 00:00:00      493
7 2023-08-21 13:21:45      495
解决方案

使用dplyr和lubridate包实现需求,代码如下:

# 加载依赖包
library(dplyr)
library(lubridate)

# 处理数据并生成目标结果
df1.r <- df1 %>%
  # 转换时间列格式为datetime
  mutate(DT = ymd_hms(DT)) %>%
  # 计算每条记录距离当日午夜的时间差绝对值,提取日期用于分组
  mutate(
    date = as_date(DT),
    midnight = ymd_hms(paste(date, "00:00:00")),
    time_diff = abs(difftime(DT, midnight, units = "secs"))
  ) %>%
  # 按日期分组,找到每组中距离午夜最近的有效值
  group_by(date) %>%
  mutate(closest_valid = odczyt.1[which.min(time_diff[!is.na(odczyt.1)])]) %>%
  ungroup() %>%
  # 筛选出所有午夜行和原数据的最后一行
  filter(DT == midnight | row_number() == n()) %>%
  # 替换午夜行的NA值为对应日期的最近有效值
  mutate(odczyt.1 = ifelse(DT == midnight & is.na(odczyt.1), closest_valid, odczyt.1)) %>%
  # 保留目标列并按时间排序
  select(DT, odczyt.1) %>%
  arrange(DT)

执行后输出结果与期望一致:

print(df1.r)
#>                    DT odczyt.1
#> 1 2023-08-16 00:00:00      482
#> 2 2023-08-17 00:00:00      484
#> 3 2023-08-18 00:00:00      486
#> 4 2023-08-19 00:00:00      489
#> 5 2023-08-20 00:00:00      490
#> 6 2023-08-21 00:00:00      493
#> 7 2023-08-21 13:21:45      495

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:13:19