我有一个数据集,它有一个日期列和一个数据列。
每个日期的行数可能不相同,其中一些日期可能只有10行,而不是24行。数据集如下:
日期 | 小时 | 值 | |
---|---|---|---|
10-06-2000 | 1 | 4||
2 | 5 | ||
3 | 7 | ||
4 | 7 | ||
5 | 8 | ||
6 | 1 | ||
7 | 7 | ||
8 | 2 | ||
9 | 3 | ||
10 | 4 | ||
11 | 5 | ||
12 | 7 | ||
13 | 8 | ||
14 | 9 | ||
15 | 10 | ||
16 | 12 | ||
17 | <1>|||
18 | 4 | ||
19 | 7 | ||
20 | 9 | ||
21 | 10 | ||
22 | 7 | ||
23 | 8 | ||
24 | 9 | ||
2000年6月11日 | 9 | <1>||
10 | 4 | ||
11 | 5 | ||
12 | 7 | ||
13 | 8 | ||
14 | 9 | ||
15 | 10 | ||
16 | 12 | ||
17 | <1>|||
18 | 4 | ||
19 | 7 | ||
20 | 9 | ||
21 | 10 | ||
22 | 7 | ||
23 | 8 | ||
24 | 9 |
如果您确信数据按正确的顺序排序,则可以使用tidyr::fill
:
library(tidyr)
df <- data.frame(
Date = c("10-06-2000", rep(NA, 5), "11-06-2000", rep(NA, 12)),
hour = c(4:9, 1:13),
value = 1:19
)
df_filled <- fill(df, Date, .direction = "down")
split(df_filled, df_filled$Date)
$`10-06-2000`
Date hour value
1 10-06-2000 4 1
2 10-06-2000 5 2
3 10-06-2000 6 3
4 10-06-2000 7 4
5 10-06-2000 8 5
6 10-06-2000 9 6
$`11-06-2000`
Date hour value
7 11-06-2000 1 7
8 11-06-2000 2 8
9 11-06-2000 3 9
10 11-06-2000 4 10
11 11-06-2000 5 11
12 11-06-2000 6 12
13 11-06-2000 7 13
14 11-06-2000 8 14
15 11-06-2000 9 15
16 11-06-2000 10 16
17 11-06-2000 11 17
18 11-06-2000 12 18
19 11-06-2000 13 19
您也可以将group_split()
与fill()
:结合使用
library(tidyr)
library(dplyr)
df <- data.frame(
Date = c("10-06-2000", rep(NA, 5), "11-06-2000", rep(NA, 12)),
hour = c(4:9, 1:13),
value = 1:19
)
df_filled <- df |>
fill(Date, .direction = "down") |>
group_split(Date) |>
purrr::set_names(unique(df$Date)[!is.na(unique(df$Date))])