【问题标题】:Data partitioning based on timeseries and groups in RR中基于时间序列和组的数据分区
【发布时间】:2021-11-20 15:38:10
【问题描述】:

我需要将大型气象时间序列数据框拆分为训练和验证样本。它包含来自多个站点的数据,这些站点具有不同的观测周期。我该如何划分它,以便每个站点的训练和验证观察的比例相等。给定以下数据集:

Station Date temp
A 2012-01-01 -0.8
A 2012-01-02 0.1
A 2012-01-03 0.5
A 2012-01-04 0.4
B 2012-01-01 0.1
B 2012-01-02 0.5

并假设训练集应仅包含来自每个站点的前 50% 的观测值,所需的输出将是:

Station Date temp
A 2012-01-01 -0.8
A 2012-01-02 0.1
B 2012-01-01 0.1

【问题讨论】:

标签: r time-series partitioning


【解决方案1】:

根据您的示例,您可以使用来自 dplyr 的 slice_head。要创建验证,请删除正在训练的记录。这是为了避免在一个站的记录数不均匀时选择重复项。

training <- df1 %>% 
  mutate(Date = as.Date(Date),
         id = row_number()) %>% 
  group_by(Station) %>% 
  slice_head(prop = 0.5)
  
validation <- df1 %>% 
  mutate(Date = as.Date(Date),
         id = row_number()) %>%
  filter(!id %in% training$id)

training
# A tibble: 3 x 4
# Groups:   Station [2]
  Station Date        temp    id
  <chr>   <date>     <dbl> <int>
1 A       2012-01-01  -0.8     1
2 A       2012-01-02   0.1     2
3 B       2012-01-01   0.1     5

validation
  Station       Date temp id
1       A 2012-01-03  0.5  3
2       A 2012-01-04  0.4  4
3       B 2012-01-02  0.5  6

【讨论】:

  • 这很好用,谢谢@phiver!
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 2012-12-07
  • 1970-01-01
  • 2012-12-04
  • 2017-02-14
  • 2011-10-19
  • 1970-01-01
  • 2018-11-08
相关资源
最近更新 更多