R中基于时间序列和组的数据分区

Data partitioning based on timeseries and groups in R

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

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

鉴于您的示例,您可以使用 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