如何根据标准使用R插入缺少的日期/时间?

时间:2018-03-05 09:24:40

标签: r dataframe time-series missing-data

如下所示的数据框。 3名员工每天有小时读数,但不完整(每位员工每天有24个读数)。

了解员工在当天的阅读次数不同。现在只对当天读数最多的员工感兴趣。

enter image description here

有很多天。它希望在当天为大多数行插入缺失的(每小时)行。也就是说,2018-03-02仅为杰克插入,2018-03-03仅为大卫插入,2018-03-04仅为凯特插入。

我尝试了来自this question的这些行(即使它们没有区别地填充所有行)但没有到达那里。

如何在R?

中完成
yadcf.exFilterColumn(oTable, [
  [0, ['Some Data 1', 'Some Data 2']]
]); 

2 个答案:

答案 0 :(得分:1)

试试这段代码:

确定每个小时和所有工作人员

date_h<-seq(as.POSIXlt(min(date_time),format="%d/%m/%Y %H:%M"),as.POSIXlt(max(date_time),format="%d/%m/%Y %H:%M"),by=60*60)
staff_u<-unique(staff)
comb<-expand.grid(staff_u,date_h)
colnames(comb)<-c("staff","date_time")

df

中的统一日期格式
df$date_time<-as.POSIXlt(df$date_time,format="%d/%m/%Y %H:%M")

合并信息

out<-merge(comb,df,all.x=T)

你的输出:

head(out)
  staff           date_time reading
1  Jack 2018-03-02 00:00:00     7.5
2  Jack 2018-03-02 01:00:00     8.3
3  Jack 2018-03-02 02:00:00      NA
4  Jack 2018-03-02 03:00:00     6.9
5  Jack 2018-03-02 04:00:00      NA
6  Jack 2018-03-02 05:00:00     7.1

答案 1 :(得分:1)

选项是单独执行此操作。创建一个感兴趣的日期data.table和相应的“员工”,并获得完整的日期时间序列,然后我们rbind使用原始数据集并使用条件,我们汇总数据< / p>

library(data.table)
stf <- c("Jack", "David", "Kate")
date <- as.Date(c("2018-03-02", "2018-03-03", "2018-03-04"))
df1 <- data.table(date, staff= stf)[, .(date_time = seq(as.POSIXct(paste(date, "00:00:00"), 
       tz = "GMT"),
           length.out = 24, by = "1 hour")), staff]

setDT(df)[, date_time := as.POSIXct(date_time, "%d/%m/%Y %H:%M", tz = "GMT")]
res <- rbindlist(list(df, df1), fill = TRUE)[, 
     .(reading = if(any(is.na(reading))) sum(reading, na.rm = TRUE) else reading),
         .(staff, date_time)]

table(res$staff, as.Date(res$date_time))

#         2018-03-02 2018-03-03 2018-03-04
#  David          3         24          2
#  Jack          24          1          1
#  Kate           3          1         24

head(res)
#   staff           date_time reading
#1:  Jack 2018-03-02 00:00:00     7.5
#2:  Jack 2018-03-02 01:00:00     8.3
#3:  Kate 2018-03-02 02:00:00     7.0
#4:  Jack 2018-03-02 03:00:00     6.9
#5:  Jack 2018-03-02 05:00:00     7.1
#6:  Jack 2018-03-02 06:00:00     8.1

tail(res)
#   staff           date_time reading
#1:  Kate 2018-03-04 04:00:00       0
#2:  Kate 2018-03-04 09:00:00       0
#3:  Kate 2018-03-04 13:00:00       0
#4:  Kate 2018-03-04 18:00:00       0
#5:  Kate 2018-03-04 21:00:00       0
#6:  Kate 2018-03-04 23:00:00       0