我有这种结构的数据(YR天气预报)
df1 <- read.table(text = "time temperature
00 0
01 0
02 1
03 1
04 2
05 2
06 2
07-13 3
13-19 4
19-01 1", header = TRUE)
我想得到一个结构:每行是一小时,因此将每小时间隔转换为适当的行数
> df1.full
time temperature
1 0 0
2 1 0
3 2 1
4 3 1
5 4 2
6 5 2
7 6 2
8 7 3
9 8 3
10 9 3
11 10 3
12 11 3
13 12 3
14 13 4
15 14 4
16 15 4
17 16 4
18 17 4
19 18 4
20 19 1
21 20 1
22 21 1
23 22 1
24 23 1
既然你要在晚上 11 点之后扔掉东西,我们可以这样做:
library(dplyr)
library(tidyr) # unnest
doseq <- function(z) {
z <- as.integer(z)
if (length(z) > 1) {
if (z[2] < z[1]) z[2] <- 23
z <- (1+z[1]):z[2]
}
z
}
df1 |>
mutate(time = lapply(strsplit(time, "-"), doseq)) |>
unnest(time) |>
print(n=99)
# # A tibble: 23 × 2
# time temperature
# <int> <int>
# 1 0 0
# 2 1 0
# 3 2 1
# 4 3 1
# 5 4 2
# 6 5 2
# 7 6 2
# 8 8 3
# 9 9 3
# 10 10 3
# 11 11 3
# 12 12 3
# 13 13 3
# 14 14 4
# 15 15 4
# 16 16 4
# 17 17 4
# 18 18 4
# 19 19 4
# 20 20 1
# 21 21 1
# 22 22 1
# 23 23 1