R语言合并多小时观测数据框:消除重复行与冗余NA值
多小时观测数据合并去重解决方案
Tidyverse 通用实现
先把所有数据框放进一个列表,纵向绑定后按hour分组,对每个变量提取有效非NA值:
library(tidyverse) # 示例:把所有数据框存入列表dfs(可通过list()或批量读取文件生成) combined_df <- dfs %>% bind_rows() %>% group_by(hour) %>% summarise( across(everything(), ~ first(na.omit(.x))), .groups = "drop" )
聚合函数替换说明
根据你的数据场景选择:
- 同一hour同一变量仅1个有效观测:
first(na.omit(.x))、last(na.omit(.x))、unique(na.omit(.x))都适用,结果一致。 - 同一hour同一变量有重复有效值:用
unique(na.omit(.x))去重;如果是布尔变量,用any(na.omit(.x))。 - 同一hour同一变量有多个不同有效值:按业务逻辑选
mean(na.omit(.x))(均值)、median(na.omit(.x))(中位数)、max(na.omit(.x))(最大值)、min(na.omit(.x))(最小值),或自定义函数。
Data.table 大规模数据优化方案
针对超大数据集,data.table的速度和内存效率更优:
library(data.table) # 转换为data.table并合并 dt_list <- lapply(dfs, as.data.table) combined_dt <- rbindlist(dt_list) # 分组聚合去重 result_dt <- combined_dt[, lapply(.SD, function(x) first(na.omit(x))), by = hour] # 可选:转回data.frame result_df <- as.data.frame(result_dt)
这里的聚合函数替换逻辑和上面完全一致,按需替换即可。
核心注意事项
- 确保所有数据框的
hour列格式统一(比如都是POSIXct时间、统一的字符/数值格式),否则分组会出问题。 - 如果存在同一hour同一变量的冲突观测(不同数值),必须先明确业务规则再选聚合函数,避免结果不符合预期。
内容的提问来源于stack exchange,提问作者SPI_4324
相关产品推荐
相关产品推荐

