我有一个日历天和每小时观测值的数据框,并具有以下关联值:

   startTime  Hour  delay
   04-22      0     10
   04-22      1     10
   04-22      3     10
   04-22      4     10


需要的是一天中的所有小时,并且与所说的小时数相关联的是0,而不是没有值或NA。如何最好地实现?我曾尝试从dplyr使用完全虚拟数据帧进行full_join,但此方法似乎笨拙且效率低下。

简而言之,我需要这个:

   startTime  Hour  delay
   04-22      0     10
   04-22      1     10
   04-22      2     0
   04-22      3     10
   04-22      4     10

最佳答案

您可以使用data.table有效地联接数据集。将“ data.frame”转换为“ data.table ( setDT(df1)), set the key columns ( setkey(..,startTime,Hour)`),并结合使用“ startTime”和“ Hour”的唯一值,并将延迟的NA值替换为“ 0”

library(data.table)
setkey(setDT(df1), startTime, Hour)[CJ(startTime=unique(startTime),
     Hour=min(Hour):max(Hour))][is.na(delay), delay:=0L]
#   startTime Hour delay
#1:     04-22    0    10
#2:     04-22    1    10
#3:     04-22    2     0
#4:     04-22    3    10
#5:     04-22    4    10


或者使用merge/expand.grid中的base R,我们可以获得以上结果

merge(expand.grid(startTime=unique(df1$startTime),
      Hour= min(df1$Hour):max(df1$Hour)), df1, all.x=TRUE)

关于r - 估算缺失的观测值R,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30532896/

10-12 03:58