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

如何在R中合并不同时间尺度的数据集(小时观测与日气象数据)

解决方案:合并数据集并构建混合效应模型

以下是在R中完成气象数据与动物观测数据合并、并构建混合效应模型的最优步骤:


1. 加载必要工具包

首先加载处理日期、数据操作和混合效应模型的核心包:

library(lubridate)  # 高效处理日期时间格式
library(dplyr)      # 数据清洗与合并
library(lme4)       # 拟合混合效应模型

2. 数据预处理与日期标准化

关键是将两个数据集的日期格式统一,以便后续合并:

处理气象数据集

将气象数据中的字符串日期转换为标准格式,并提取纯日期部分(因气象数据为日均值,小时信息无合并意义):

# 样本气象数据
date <- c("1/1/2020 3:00", "1/2/2020 3:00","1/3/2020 3:00")
temp <- c(18, 25, 10)
press <- c(.25, .5, 1.25)
met <- data.frame(date, press, temp)

# 标准化日期
met <- met %>%
  mutate(datetime = dmy_hm(date),  # 将字符串转为datetime格式(日/月/年 时:分)
         date_only = as_date(datetime)) %>%  # 提取纯日期
  select(-date, -datetime)  # 清理冗余列

处理观测计数数据集

将分散的月、日、小时列合并为标准日期格式(需补充年份,这里与气象数据统一为2020年):

# 样本观测数据
month <- c(1, 1, 1, 1, 1, 1, 1, 1, 1)
day <- c(1, 1, 1, 2, 2, 2, 3, 3,3)
hour <- c(10, 11, 12, 10, 11, 12,10, 11, 12)
obs <- c(14, 88, 67, 198, 3, 54, 2, 80, 36)
counts <- data.frame(month, day, hour, obs)

# 构建统一日期列
counts <- counts %>%
  mutate(date_only = make_date(year = 2020, month = month, day = day))

3. 合并数据集

使用left_join按纯日期列合并,确保保留所有观测数据(即使对应日期无气象数据时也不会丢失):

merged_data <- left_join(counts, met, by = "date_only")

合并后的数据会将每日的气象变量(temp、press)匹配到当天所有小时的观测计数上。


4. 构建混合效应模型

针对计数型数据,优先选择泊松或负二项混合效应模型(负二项用于处理过度离散情况):

泊松混合效应模型

假设小时为随机效应(控制不同小时的观测差异),气象变量为固定效应:

# 拟合模型
poisson_model <- glmer(obs ~ temp + press + (1 | hour), 
                       data = merged_data, 
                       family = poisson(link = "log"))

# 查看模型结果
summary(poisson_model)

负二项混合效应模型(处理过度离散)

若泊松模型出现过度离散(可通过残差分析判断),改用负二项模型:

nb_model <- glmer.nb(obs ~ temp + press + (1 | hour), data = merged_data)
summary(nb_model)

你可根据实际研究设计调整随机效应(例如将day作为随机效应),以更准确控制组内变异。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:24:16