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

R语言提取CSV工作日时段CO₂最大值:时间提取返回NA问题求助

解决CSV环境数据筛选与CO₂最大值计算问题

问题根源

你用parse_date_time(df$timestamp, '%H:%M:%S')生成df$time时返回NA,是因为df$timestamp已经被ymd_hms()转换成了datetime对象,而parse_date_time()是用来解析字符串格式的时间,不是从已有的datetime对象中提取时间部分,所以会返回无效值。

修正方案

不需要单独提取time列,直接利用lubridate的时间函数筛选,或者用hms工具提取纯时间部分,以下是两种可行写法:

方法1:直接用hour函数筛选时段(简洁版)

这种方式无需额外创建时间列,直接通过小时范围筛选:

library(lubridate)
library(dplyr)

# 读取数据并转换时间格式
df <- read.csv("data.csv", nrows=50)
df$timestamp <- ymd_hms(df$timestamp)
df$date <- date(df$timestamp)

# 筛选工作日+08:00-17:00的数据,计算每日CO₂最大值
result <- df %>%
  filter(!is.weekend(date), 
         hour(timestamp) >= 8, 
         hour(timestamp) <= 17) %>%
  group_by(date) %>%
  summarize(max_co2 = max(co2, na.rm = TRUE)) # na.rm避免NA干扰计算

print(result)

方法2:提取纯时间列进行筛选(保留时间列版)

如果需要保留时间字段,可以用hms包从datetime对象中提取纯时间部分:

library(lubridate)
library(dplyr)
library(hms) # 需加载hms包

df <- read.csv("data.csv", nrows=50)
df$timestamp <- ymd_hms(df$timestamp)
df$date <- date(df$timestamp)
# 从datetime对象提取HH:MM:SS格式的纯时间
df$time <- as.hms(df$timestamp)

# 筛选并计算最大值
result <- df %>%
  filter(!is.weekend(date), 
         time >= hms("08:00:00"), 
         time <= hms("17:00:00")) %>%
  group_by(date) %>%
  summarize(max_co2 = max(co2, na.rm = TRUE))

print(result)

额外注意点

  • 原代码中summarize(min = min(value), max = max(value))里的value是错误的,需替换为目标列co2
  • 加入na.rm = TRUE可以避免数据中存在NA时导致计算结果失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:25:13