r语言 - 时间序列 SparkR 缺失值



我正在使用SparkR进行时间序列,我有一个问题。

经过一些操作,我得到了这样的东西,其中 DayHour 表示 ID 值的日期和时间。

DayHour ID    Value
01 00   4704   10
01 01   4705   11
.
.
.
04 23   4705   12

问题是我有一些差距,比如01 01,01 02丢失

DayHour ID    Value
01 00   4704   13
01 03   4704   12

我必须用以下方法填充整个数据集中的空白:

 DayHour ID    Value
01 00   4704   13
01 01   4704   0
01 02   4704   0
01 03   4704   12

对于每个 ID,我必须用缺少的 DayHour 填补空白,ID 和值 = 0

R SparkR中的解决方案将是有用的。

我在数据框中表示了您的数据df_r

>df_r <- data.frame(DayHour=c("01 00","01 01","01 02","01 03","01 06","01 07"), 
      ID = c(4704,4705,4705,4706,4706,4706),Value=c(10,11,12,13,14,15))
> df_r
  DayHour   ID Value
1   01 00 4704    10
2   01 01 4705    11
3   01 02 4705    12
4   01 03 4706    13
5   01 06 4706    14
6   01 07 4706    15
where the missing hours are 01 04 and 01 05
#Removing white spaces
>df_r$DayHour <- sub(" ", "", df_r$DayHour)
 # create dummy all the 'dayhour' in sequence
x=c(00:23)
y=01:04

all_day_hour <- data.frame(Hour = rep(x,4), Day = rep(y,each=24))
all_day_hour$Hour <-  sprintf("%02d", all_day_hour$Hour)
all_day_hour$Day <-  sprintf("%02d", all_day_hour$Day)
all_day_hour_1 <- transform(all_day_hour,DayHour=paste0(Day,Hour))
all_day_hour_1 <- all_day_hour_1[c(3)]
# using for loop to filter out by each id
>library(dplyr)
>library(forecast)
>df.new <- data.frame()
>factors=unique(df_r$ID)
>for(i in 1:length(factors))
{
  df_r1 <- filter(df_r, ID == factors[i])
#Merge
df_data1<- merge(df_r1, all_day_hour_1, by="DayHour", all=TRUE)
df_data1$Value[which(is.na(df_data1$Value))] <- 0
df.new <- rbind(df.new, df_data1)
}

最新更新