【发布时间】:2021-06-09 20:04:54
【问题描述】:
我有一个数据框,其中缺少 Time GMT 中的某些时间。
通常,小时数应按 00:00 到 23:00 的顺序显示,但有时会错过一个小时。
如果序列中缺少一个小时,我想插入一个新行。
新行将是前一行的副本,但以下列更改如下:
-
Time GMT: 将包含上一行的下一个小时。即,如果先前 == 5:00,则新 == 6:00 -
Sample Measurement:将包含 Sample Measurement 列中上一个值和下一个值之间的平均值。 -
MDL: 将包含 MDL 列中上一个值和下一个值之间的平均值
我尝试了什么
library(dplyr)
library(tidyr)
class(hrOzone$Time.GMT) # output type "character"
hrOzone %>%
group_by(Date.GMT) %>%
complete(Time.GMT = full_seq(01:24, 1), fill = list(count = 0))
head(hrOzone$Time.GMT, n = 100L)
数据源地址:https://drive.google.com/file/d/1o1voBktR3i8ROt1Hp59OW5t3_uukIA3j/view?usp=sharing
格林威治标准时间 格林威治标准时间 样品测量 MDL
01/03/2016 21:00:00 0.036 0.005
2016 年 1 月 3 日 22:00:00 0.035 0.007
01/03/2016 23:00:00 0.029 0.008
02/03/2016 00:00:00 0.03
02/03/2016 01:00:00 0.01
02/03/2016 02:00:00
2016 年 2 月 3 日 03:00:00
02/03/2016 04:00:00
02/03/2016 05:00:00
2016 年 2 月 3 日 07:00:00
02/03/2016 08:00:00
02/03/2016 09:00:00
2016 年 2 月 3 日 10:00:00
2016 年 2 月 3 日 11:00:00
2016 年 2 月 3 日 12:00:00
2016 年 2 月 3 日 13:00:00
2016 年 2 月 3 日 14:00:00
2016 年 2 月 3 日 16:00:00
2016 年 2 月 3 日 17:00:00
2016 年 2 月 3 日 18:00:00
2016 年 2 月 3 日 19:00:00
2016 年 2 月 3 日 20:00:00
2016 年 2 月 3 日 21:00:00
2016 年 2 月 3 日 22:00:00
2016 年 2 月 3 日 23:00:00
2016 年 2 月 3 日 00:00:00
2016 年 3 月 3 日 01:00:00
03/03/2016 02:00:00
03/03/2016 03:00:00
2016 年 3 月 3 日 04:00:00
2016 年 3 月 3 日 06:00:00
03/03/2016 08:00:00
根据 Waldi 要求更新
> dput(head(hrOzone,20))
structure(list(State.Code = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), County.Code = c(3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), Site.Num = c(10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L
), Parameter.Code = c(44201L, 44201L, 44201L, 44201L, 44201L,
44201L, 44201L, 44201L, 44201L, 44201L, 44201L, 44201L, 44201L,
44201L, 44201L, 44201L, 44201L, 44201L, 44201L, 44201L), POC = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L), Latitude = c(30.497478, 30.497478, 30.497478, 30.497478,
30.497478, 30.497478, 30.497478, 30.497478, 30.497478, 30.497478,
30.497478, 30.497478, 30.497478, 30.497478, 30.497478, 30.497478,
30.497478, 30.497478, 30.497478, 30.497478), Longitude = c(-87.880258,
-87.880258, -87.880258, -87.880258, -87.880258, -87.880258, -87.880258,
-87.880258, -87.880258, -87.880258, -87.880258, -87.880258, -87.880258,
-87.880258, -87.880258, -87.880258, -87.880258, -87.880258, -87.880258,
-87.880258), Datum = c("NAD83", "NAD83", "NAD83", "NAD83", "NAD83",
"NAD83", "NAD83", "NAD83", "NAD83", "NAD83", "NAD83", "NAD83",
"NAD83", "NAD83", "NAD83", "NAD83", "NAD83", "NAD83", "NAD83",
"NAD83"), Parameter.Name = c("Ozone", "Ozone", "Ozone", "Ozone",
"Ozone", "Ozone", "Ozone", "Ozone", "Ozone", "Ozone", "Ozone",
"Ozone", "Ozone", "Ozone", "Ozone", "Ozone", "Ozone", "Ozone",
"Ozone", "Ozone"), Date.Local = c("2016-03-01", "2016-03-01",
"2016-03-01", "2016-03-01", "2016-03-01", "2016-03-01", "2016-03-01",
"2016-03-01", "2016-03-01", "2016-03-02", "2016-03-02", "2016-03-02",
"2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02",
"2016-03-02", "2016-03-02", "2016-03-02"), Time.Local = c("15:00",
"16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00",
"23:00", "01:00", "02:00", "03:00", "04:00", "05:00", "06:00",
"07:00", "08:00", "10:00", "11:00", "12:00"), Date.GMT = c("2016-03-01",
"2016-03-01", "2016-03-01", "2016-03-02", "2016-03-02", "2016-03-02",
"2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02",
"2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02",
"2016-03-02", "2016-03-02", "2016-03-02", "2016-03-02"), Time.GMT = c("21:00",
"22:00", "23:00", "00:00", "01:00", "02:00", "03:00", "04:00",
"05:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00",
"13:00", "14:00", "16:00", "17:00", "18:00"), Sample.Measurement = c(0.041,
0.041, 0.042, 0.041, 0.038, 0.038, 0.036, 0.035, 0.029, 0.026,
0.03, 0.03, 0.028, 0.027, 0.025, 0.023, 0.025, 0.034, 0.036,
0.038), Units.of.Measure = c("Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million",
"Parts per million", "Parts per million", "Parts per million"
), MDL = c(0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
0.005, 0.005, 0.005), Uncertainty = c(NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Qualifier = c("",
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "",
"", "", ""), Method.Type = c("FEM", "FEM", "FEM", "FEM", "FEM",
"FEM", "FEM", "FEM", "FEM", "FEM", "FEM", "FEM", "FEM", "FEM",
"FEM", "FEM", "FEM", "FEM", "FEM", "FEM"), Method.Code = c(47L,
47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L, 47L,
47L, 47L, 47L, 47L, 47L, 47L), Method.Name = c("INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET", "INSTRUMENTAL - ULTRA VIOLET",
"INSTRUMENTAL - ULTRA VIOLET"), State.Name = c("Alabama", "Alabama",
"Alabama", "Alabama", "Alabama", "Alabama", "Alabama", "Alabama",
"Alabama", "Alabama", "Alabama", "Alabama", "Alabama", "Alabama",
"Alabama", "Alabama", "Alabama", "Alabama", "Alabama", "Alabama"
), County.Name = c("Baldwin", "Baldwin", "Baldwin", "Baldwin",
"Baldwin", "Baldwin", "Baldwin", "Baldwin", "Baldwin", "Baldwin",
"Baldwin", "Baldwin", "Baldwin", "Baldwin", "Baldwin", "Baldwin",
"Baldwin", "Baldwin", "Baldwin", "Baldwin"), Date.of.Last.Change = c("2016-06-20",
"2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20",
"2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20",
"2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20",
"2016-06-20", "2016-06-20", "2016-06-20", "2016-06-20")), row.names = c(NA,
20L), class = "data.frame")
>
【问题讨论】:
-
你能
dput(head(hrOzone,20))吗?下载 1.9Gb 的数据毫无意义。 -
@Waldi,我刚刚按照您的要求更新了问题
-
如果您查看此向量,您会发现缺少
6:00。它直接从"05:00",到"07:00"。时间.GMT= c("21:00", "22:00", "23:00", "00:00", "01:00", "02:00", "03:00", "04:00", "05:00", "07:00", "08:00", "09:00", "10:00", "11:00", "12:00", "13:00", "14:00", "16:00", "17:00", "18:00"), -
好的,谢谢,明白了!
-
如果没有先前的值会怎样?