R - 估计缺失值

Cra*_*aig 4 r data-quality

我们假设我有一个表格如下:

Date        Sales
09/01/2017  9000
09/02/2017  12000
09/03/2017  0
09/04/2017  11000
09/05/2017  14400
09/06/2017  0
09/07/2017  0
09/08/2017  21000
09/09/2017  15000
09/10/2017  23100
09/11/2017  0
09/12/2017  32000
09/13/2017  8000
Run Code Online (Sandbox Code Playgroud)

这是表格中的数据

表中的值是由我无法访问的R程序估计的(现在是黑盒子).现在有几天有0值,由于我们的摄取/ ETL过程中的问题,这些值往往会蔓延.我需要用0数据估计日期的值.

我们的方法是:

  • 从缺失数据之前的日期到缺失数据之后的日期画一条线
  • 估算该行中缺失日期的值

现在,如果只有一天在两个好日子之间缺少数据,那么直截了当的意思就行了.如果连续两天或多天缺少数据,那么平均值就不起作用,所以我试图制定一种方法来估算多个数据点的值.

绿线和红线的交点将给出所需的值

这种方法在R中有效吗?我在R总共n00b,所以我不确定这是否可行.

G5W*_*G5W 6

您可以使用该函数通过线性插值填充值approxfun.

## Your data
df = read.table(text="Date        Sales
09/01/2017  9000
09/02/2017  12000
09/03/2017  0
09/04/2017  11000
09/05/2017  14400
09/06/2017  0
09/07/2017  0
09/08/2017  21000
09/09/2017  15000
09/10/2017  23100
09/11/2017  0
09/12/2017  32000
09/13/2017  8000",
header=TRUE, stringsAsFactors=FALSE)
df$Date = as.Date(df$Date, format="%m/%d/%Y")


## Create function for linear interpolation
Interp = approxfun(df[df$Sales > 0, ])

## Use function to fill in interpolated values
Vals = Interp(df$Date[df$Sales == 0])
df$Sales[df$Sales == 0] = Vals
plot(df, type="l")
grid()
Run Code Online (Sandbox Code Playgroud)

插值