填充缺失的观察[R
问题描述:
我的日历天数据帧,并与像这样关联值每小时观测:填充缺失的观察[R
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
,或利用base R
merge/expand.grid
值延迟,我们可以得到上述结果
merge(expand.grid(startTime=unique(df1$startTime),
Hour= min(df1$Hour):max(df1$Hour)), df1, all.x=TRUE)
答
使用dplyr和动物园:
library(dplyr)
library(zoo) #na.locf
#dummy data
df1 <- read.table(text=" startTime Hour delay
04-22 0 10
04-22 1 10
04-22 3 10
04-22 4 10",header=TRUE)
#result
full_join(df1,data.frame(Hour=0:23),
by="Hour") %>%
arrange(Hour,startTime) %>%
mutate(startTime=na.locf(startTime),
delay=ifelse(is.na(delay),0,delay))