R 添加缺少的时间值

R 添加缺少的时间值,r,R,我有一个表格,它给出了我收到数据的日期和时间,以及在30分钟间隔内收到多少数据的计数。我的问题是缺少一些半小时块,我想将它们插入到列中,然后在计数列中插入一个0 下面是该表的示例: Date-Time Count 2017-07-13 17:30:00 111 2017-07-13 18:00:00 85 2017-07-13 20:00:00 127 2017-07-13 20:30:00 515 我希望它有18:30:00等等 如果有人有好主意,我不知道该怎么做

我有一个表格,它给出了我收到数据的日期和时间,以及在30分钟间隔内收到多少数据的计数。我的问题是缺少一些半小时块,我想将它们插入到列中,然后在计数列中插入一个0

下面是该表的示例:

Date-Time           Count
2017-07-13 17:30:00 111

2017-07-13 18:00:00 85

2017-07-13 20:00:00 127

2017-07-13 20:30:00 515
我希望它有18:30:00等等

如果有人有好主意,我不知道该怎么做

以下是我试图做的:

starttime <- df[1,`Date-Time`]

for (i in df){
  time <- starttime + 30
  new_dt$datetime <- ifelse(df[i] = time, df$datetime, time)
  new_dt$count <- ifelse(df[i] = time, df$count, 0)
}

starttime首先,让我们创建一些虚拟数据

library(tidyverse)
library(lubridate)

time_series <- tibble(
  DateTime = c(
    "2017-07-13 17:30:00",
    "2017-07-13 18:00:00",
    "2017-07-13 20:00:00",
    "2017-07-13 20:30:00"
  ),
  Count = c(111, 85, 127, 515)
) %>%
  mutate(DateTime = ymd_hms(DateTime))

首先,我已将您的列的名称
Date-Time
更改为
Date.Time

#dput(dat)
dat <-
structure(list(Date.Time = structure(c(1499963400, 1499965200, 
1499972400, 1499974200), class = c("POSIXct", "POSIXt"), tzone = ""), 
    Count = c(111L, 85L, 127L, 515L)), .Names = c("Date.Time", 
"Count"), row.names = c(NA, -4L), class = "data.frame")

如果需要,您可以
rm(tmp)

在这些工作正常时,我认为最好的办法是使用
padr
包:

library(dplyr)
library(padr)

pad_df <- df %>% 
  pad(interval = '30 mins')
padr
软件包还具有
thicken
功能,以防您需要快速无缝地切换到较低的频率


展示你的最佳尝试-添加一些代码。很好,击败我+1谢谢你,瓦尔!非常感谢。最后使用了这种方式,因为我更熟悉这一点。谢谢你,这对我很有效
#dput(dat)
dat <-
structure(list(Date.Time = structure(c(1499963400, 1499965200, 
1499972400, 1499974200), class = c("POSIXct", "POSIXt"), tzone = ""), 
    Count = c(111L, 85L, 127L, 515L)), .Names = c("Date.Time", 
"Count"), row.names = c(NA, -4L), class = "data.frame")
tmp <- data.frame(
    Date.Time = seq(min(dat$Date.Time), max(dat$Date.Time), by = "30 min"))
tmp
            Date.Time
1 2017-07-13 17:30:00
2 2017-07-13 18:00:00
3 2017-07-13 18:30:00
4 2017-07-13 19:00:00
5 2017-07-13 19:30:00
6 2017-07-13 20:00:00
7 2017-07-13 20:30:00

merge(dat, tmp, all.y = TRUE)
            Date.Time Count
1 2017-07-13 17:30:00   111
2 2017-07-13 18:00:00    85
3 2017-07-13 18:30:00    NA
4 2017-07-13 19:00:00    NA
5 2017-07-13 19:30:00    NA
6 2017-07-13 20:00:00   127
library(dplyr)
library(padr)

pad_df <- df %>% 
  pad(interval = '30 mins')
pad_df[is.na(pad_df)] <- 0