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