在R中聚合每小时温度数据:求每日温度范围的技术求助
嗨,我来帮你搞定这个R语言的温度数据处理问题!针对你提到的非标准日期和批量计算每日温变的需求,我给你两种解决方案,优先推荐更可靠的按日期分组方法,同时也满足你想按每24行计算的需求。
方案一:按日期分组(更稳妥)
首先得把你的非标准日期转换成R能识别的格式,这样就能精准按日期分组计算,避免因某天数据行数异常(比如缺记录、多记录)导致的错误。
- 先加载必要的包(
dplyr用于数据分组汇总,lubridate处理日期更省心):
library(dplyr) library(lubridate)
- 转换日期列:你的日期格式是
月/日/年,用lubridate的mdy()函数可以自动识别,不用手动写格式串:
# 给数据框新增标准日期列 df$standard_date <- mdy(df$DATE_TIME) # 如果不想用lubridate,也可以用基础R的as.Date(),指定格式: # df$standard_date <- as.Date(df$DATE_TIME, format = "%m/%d/%Y")
- 分组计算每日的最低温、最高温和温差:
注意你的温度列名带空格和括号,要用上反引号`把列名包起来,不然R会识别错误:
daily_temp_summary <- df %>% group_by(standard_date) %>% summarise( daily_min = min(`TEMP (DEG C)`), daily_max = max(`TEMP (DEG C)`), daily_temp_range = daily_max - daily_min )
运行完这个代码,daily_temp_summary就是你要的每日温度汇总数据框啦。
方案二:按每24行分组(适合数据严格按天排列且无异常的情况)
如果你确定数据集是严格按时间顺序排列,每天正好24条记录,那可以直接按行分组计算:
- 先给每行分配分组编号,每24行一组:
df$group_id <- ceiling(seq(nrow(df)) / 24)
- 按分组编号计算温变:
daily_temp_by_row <- df %>% group_by(group_id) %>% summarise( daily_min = min(`TEMP (DEG C)`), daily_max = max(`TEMP (DEG C)`), daily_temp_range = daily_max - daily_min )
小提示
- 优先用方案一,因为实际数据中很可能出现某天记录缺失或重复的情况,按日期分组能保证计算的准确性;
- 如果你的
DATE_TIME列里还包含时间(比如5/1/1999 00:00),mdy()或者as.Date()依然能正确提取日期部分,不用额外处理。
内容的提问来源于stack exchange,提问作者Will Kirkpatrick
相关产品推荐
相关产品推荐

