将时间间隔转换为等小时并填写值栏

问题描述 投票:0回答:1

我有这种结构的数据(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
r dplyr
1个回答
0
投票

既然你要在晚上 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
© www.soinside.com 2019 - 2024. All rights reserved.