R语言如何自动为时间序列数据按每日维度拆分生成子集
实现方案
你已经加载了tibbletime和dplyr,可以直接用dplyr的group_split()函数配合日期分组完成自动拆分,不需要手动逐个写日期筛选逻辑:
# 1. 给tbl_time对象新增日期列,提取时间戳的日期部分 bio2_table <- bio2_table %>% mutate(obs_date = as.Date(你的时间列名)) # 此处替换为你实际的时间列名称,比如样例第二列如果叫datetime就填datetime # 2. 按日期分组拆分,得到一个列表,每个元素对应单日的data frame daily_df_list <- bio2_table %>% group_by(obs_date) %>% group_split(.keep = FALSE) # .keep=FALSE代表生成的单日df不保留新增的obs_date列,需要留存的话改成TRUE # 3. 给列表内的每个df按日期命名,方便后续调用 names(daily_df_list) <- unique(bio2_table$obs_date)
调用方式
之后要提取某一天的数据,直接用日期索引即可,比如取2021-10-20的数据:
day_20211020 <- daily_df_list[["2021-10-20"]]
如果确实需要把每个单日df单独存为全局环境的独立变量(更推荐用列表统一管理,一年365个独立变量查找、批量处理都很麻烦),可以用下面的代码批量生成:
# 批量生成全局变量,变量名格式为day_年月日 lapply(names(daily_df_list), function(x) { assign(paste0("day_", gsub("-", "", x)), daily_df_list[[x]], envir = .GlobalEnv) })
注意事项
- 确保你的时间列已经是POSIXct/POSIXlt格式,
as.Date()才能正确提取日期 - 用列表统一管理单日数据后续批量统计、绘图都可以直接用
lapply循环处理,不需要重复写代码,效率更高
内容的提问来源于stack exchange,提问作者Ari Kollias
相关产品推荐
相关产品推荐

