如何用R计算修正温度:站点日均温与逐时温度差值
用R实现气象数据的温度校正计算
需求:针对9个月的气象数据,按站点和日期,将df1中的逐时气温(Temperature)与df2中对应站点当日的日均温(AverageTemperaturePerDayAndStation)做关联,生成如df3所示的CorrectedTemperature列。
数据示例
df1(逐时气温数据)
Station Date Temperature 0 Station1 2022-05-1 9:30:00 7,4 1 Station1 2022-05-1 9:45:00 7,45 2 Station1 2022-05-1 10:00:00 8,2 3 Station1 2022-05-1 10:15:00 8,4 4 Station1 2022-05-1 10:30:00 8,9 5 Station1 2022-05-1 9:30:00 7,5 6 Station2 2022-05-1 9:45:00 7,56 7 Station2 2022-05-1 10:00:00 8,4 8 Station2 2022-05-1 10:15:00 8,7 9 Station2 2022-05-1 10:30:00 8,1 10 ...
df2(站点日均温数据)
Station Date AverageTemperaturePerDayAndStation 0 Station1 2022-05-1 8 1 Station1 2022-05-2 8,3 2 Station1 2022-05-3 8,6 3 Station1 2022-05-4 8,4 4 Station1 2022-05-5 7,9 5 Station2 2022-05-1 6 6 Station2 2022-05-2 7,3 7 Station2 2022-05-3 8,6 8 Station2 2022-05-4 7,4 9 Station2 2022-05-5 6,9 10 ...
期望输出df3
Station Date CorrectedTemperature 0 Station1 2022-05-1 9:30:00 7,4 - 8 1 Station1 2022-05-1 9:45:00 7,45 - 8 2 Station1 2022-05-1 10:00:00 8,2 - 8 3 Station1 2022-05-1 10:15:00 8,4 - 8 4 Station1 2022-05-1 10:30:00 8,9 - 8 5 Station1 2022-05-1 9:30:00 7,5 - 8 6 Station2 2022-05-1 9:45:00 7,56 - 6 7 Station2 2022-05-1 10:00:00 8,4 - 6 8 Station2 2022-05-1 10:15:00 8,7 - 6 9 Station2 2022-05-1 10:30:00 8,1 - 6 10 ...
R实现代码
# 加载工具包 library(dplyr) library(lubridate) # 处理df1:提取纯日期字段,保留原始气温字符串 df1_processed <- df1 %>% mutate( Date_only = as.Date(Date), Temp_raw = Temperature ) # 处理df2:统一日期格式,保留原始日均温字符串 df2_processed <- df2 %>% mutate( Date = as.Date(Date), Avg_temp_raw = AverageTemperaturePerDayAndStation ) # 按站点和日期合并两个数据集 df_merged <- left_join(df1_processed, df2_processed, by = c("Station", "Date_only" = "Date")) # 生成符合示例格式的CorrectedTemperature列 df3 <- df_merged %>% mutate(CorrectedTemperature = paste(Temp_raw, "-", Avg_temp_raw)) %>% select(Station, Date, CorrectedTemperature) # 查看结果 head(df3)
如果需要计算实际差值(而非显示表达式),可使用以下代码:
# 处理df1:转换气温为数值型 df1_processed <- df1 %>% mutate( Date_only = as.Date(Date), Temp_num = as.numeric(gsub(",", ".", Temperature)) ) # 处理df2:转换日均温为数值型 df2_processed <- df2 %>% mutate( Date = as.Date(Date), Avg_temp_num = as.numeric(gsub(",", ".", AverageTemperaturePerDayAndStation)) ) # 合并并计算差值 df_merged <- left_join(df1_processed, df2_processed, by = c("Station", "Date_only" = "Date")) df3 <- df_merged %>% mutate(CorrectedTemperature = Temp_num - Avg_temp_num) %>% select(Station, Date, CorrectedTemperature)
内容的提问来源于stack exchange,提问作者Alonso Cid
相关产品推荐
相关产品推荐

