如何在R中合并多行数据并按15分钟时间间隔分箱处理?
R语言按15分钟间隔聚合蜂箱数据(处理NA值)
步骤1:安装并加载必要的R包
我们需要用dplyr做数据聚合,lubridate处理日期时间,首次使用需先安装:
# 安装依赖包(仅首次运行需要) install.packages(c("dplyr", "lubridate")) # 加载包 library(dplyr) library(lubridate)
步骤2:准备示例数据
将你提供的示例数据转换成R可识别的数据框:
bee_data <- data.frame( DateTime = c("29/09/2022 11:30", "29/09/2022 11:30", "29/09/2022 11:43", "29/09/2022 11:45", "29/09/2022 11:46"), Temp = c(NA, 61.22, 62.02, NA, 62.33), Weight = c(NA, 49.22, NA, 48.99, NA), In = c(220, NA, 211, NA, 133), Out = c(210, NA, 156, NA, 155) )
步骤3:转换日期时间格式
原始DateTime是字符型,需转换成R的时间类型,用dmy_hm()适配你的日/月/年 时:分格式:
bee_data <- bee_data %>% mutate(DateTime = dmy_hm(DateTime))
步骤4:按15分钟间隔分组聚合
用floor_date()将时间向下取整到最近的15分钟,再对不同列执行对应聚合规则:
In/Out:忽略NA求和Temp/Weight:忽略NA取平均值
代码如下:
aggregated_data <- bee_data %>% # 生成15分钟间隔的分组标签 mutate(Time_Interval = floor_date(DateTime, "15 minutes")) %>% # 按时间间隔分组计算 group_by(Time_Interval) %>% summarise( Temp = mean(Temp, na.rm = TRUE), Weight = mean(Weight, na.rm = TRUE), In = sum(In, na.rm = TRUE), Out = sum(Out, na.rm = TRUE) ) %>% # 重命名列名匹配你的期望格式 rename(DateTime = Time_Interval)
查看最终结果
执行print(aggregated_data)即可得到目标输出:
# A tibble: 2 × 5 DateTime Temp Weight In Out <dttm> <dbl> <dbl> <dbl> <dbl> 1 2022-09-29 11:30:00 61.6 49.2 431 366 2 2022-09-29 11:45:00 62.3 49.0 133 155
(注:R默认显示小数位数有限,可通过options(digits=4)调整精度,显示原始的48.99)
补充说明
- 若你的数据来自CSV等文件,用
read.csv()读取后,直接执行步骤3-4即可。 na.rm = TRUE是核心参数,确保聚合时自动忽略NA值,避免结果出现NA。
内容的提问来源于stack exchange,提问作者Maddy
相关产品推荐
相关产品推荐

