R语言生成每日含多记录的时间序列数据的所有取值组合
实现代码
library(tidyverse) # 拆分固定记录(每日仅1条)和可变记录(每日多条) fixed_df <- consumption %>% filter(n == 1) %>% select(date, val, record) variable_list <- consumption %>% filter(n > 1) %>% select(date, val, record) %>% # 按日期拆分得到每个多记录日期的所有可选行 split(.$date) # 生成所有可选组合,拼接得到全部分组 result <- cross(variable_list) %>% map(~ bind_rows(fixed_df, .x) %>% arrange(date))
结果验证
运行代码后result就是你需要的6个分组列表,逐个打印可以看到和给出的示例完全匹配,比如第一个分组输出如下:
> result[[1]] date val record 1 2020-06-01 10 1 2 2020-06-02 20 1 3 2020-06-03 31 1 4 2020-06-04 40 1 5 2020-06-05 51 1
逻辑说明
- 先拆分出每日只有1条记录的固定部分,这部分在所有分组里完全一致
- 把有多条记录的日期按日期拆分,每个日期对应一个可选行的列表
- 用
cross()生成这些可选行的笛卡尔积,正好覆盖所有可能的取值组合 - 每个组合和固定部分拼接后按日期排序,就得到了最终的分组结果
内容的提问来源于stack exchange,提问作者M.Qasim
相关产品推荐
相关产品推荐

