将嵌套列表结构的时间序列数据集重构为标准数据框
将嵌套列表格式的传感器数据转换为标准数据框(R语言)
解决方案步骤
针对这种年→月→日→小时的多层嵌套传感器数据(每个时间节点对应分号分隔的读数),可以用tidyverse工具链快速转换成目标结构的数据框:
- 加载必要的包
library(tidyverse)
- 展开嵌套列表,提取时间层级与读数
把嵌套的层级结构展开,得到包含年、月、日、小时和对应读数的基础数据表:
sensor_data <- N1 %>% enframe(name = "year") %>% unnest_longer(value, indices_to = "month") %>% unnest_longer(value, indices_to = "day") %>% unnest_longer(value, indices_to = "hour") %>% rename(readings = value)
- 转换日期格式并拆分读数
合并年月日为标准日期,同时把分号分隔的读数拆分为独立的指标列:
final_df <- sensor_data %>% # 生成标准日期格式 mutate(date = ymd(paste(year, month, day, sep = "-"))) %>% # 拆分读数字符串,自动转换为数值类型 separate(readings, into = c("T", "RH", "CO", "CO2", "CH2O", "O3", "NO2", "VOC", "PM1", "PM2.5", "PM10", "Battery"), sep = ";", convert = TRUE) %>% # 调整列顺序,保留需要的字段 select(date, hour, T, RH, CO, CO2, CH2O, O3, NO2, VOC, PM1, `PM2.5`, PM10, Battery)
- 查看结果
运行head(final_df)就能得到结构化的数据框,格式示例如下:
# A tibble: 3 × 14 date hour T RH CO CO2 CH2O O3 NO2 VOC PM1 `PM2.5` PM10 Battery <date> <chr> <dbl> <int> <dbl> <int> <dbl> <dbl> <dbl> <int> <int> <int> <int> <dbl> 1 2023-11-16 19:24 26.8 89 0.5 548 0.03 0.02 0.13 3 22 27 30 3.56 2 2023-11-16 19:34 27.8 90 0.5 550 0.032 0.021 0.14 3 23 28 31 3.55 3 2023-11-16 19:44 28.8 91 0.5 552 0.031 0.022 0.13 3 22 27 30 3.54
内容的提问来源于stack exchange,提问作者Rahmat Hidayat
相关产品推荐
相关产品推荐

