R:使用从上一个值和下一个值计算的增量值填充数据缺口

时间:2018-03-02 22:00:08

标签: r

我有两列:时间和价值。时间是连续的,没有任何空白。但是,值包括在随机点采样的数据,因此在值之间具有随机长度的数据间隙。

这是一个非常简单的样本数据集:

df <-data.frame(Time=1:10, Value=c("2", NA, NA, NA, "6", NA, NA, "7", NA, "3"))

我想创建第三列,&#34; Estimate&#34;。在这个新专栏下:

  • 如果值不为空,则Estimate = Value。
  • 如果值为空,则:(这是我遇到麻烦的部分!)
    • 在“值”下,找到最后一个非NA值,找到下一个非NA值,并找出差异
    • 取差值并将其除以第一个值的空行数,并包括下一个值
    • 使用该数字,从最后一个非NA值逐渐填写估算列到下一个非NA值

例如,对于时间2

  • 第一个值= 2(来自时间1)
  • 下一个值= 6(从时间5开始)
  • 差异= 4
  • 增量= 4/4(因为有3个空格+时间5和记录值)
  • 因此,时间2的估计值将是第一个值+增量= 2 + 1 = 3
  • 时间3的估计值为4,时间4的估计值为5.类似地,时间6为6.33,时间7为6.66,然后时间8的实际值为7.

基本上我只是从第一个值到下一个值进行同等加权的转换。我不关心第一个值或最后一个值之前的任何事情(如果在时间1之前或时间10之后有NA)。


问题:

作为一个非常新手,当Value为空时,我不太确定如何最好地编写Estimate列的编码。我已经尝试为具有实际值的行生成行号向量,以为我可以将其用作索引引用。然后我尝试做一个循环,它将采用行A和行B(从行号的向量),计算增量,然后将增量添加到最后一个单元格。但是,我无法弄清楚如何制作A&amp; A; B同时增加1(这样它就是#34;滚动窗口&#34;向下我的行数向量)。我也怀疑这不是解决这个问题的好办法......但不知道我的选择是什么。

非常感谢任何指导并指出正确的方向!

1 个答案:

答案 0 :(得分:1)

由于您将df $ Value中的值视为数字,我假设您需要数字,而不是字符串。

df <-data.frame(Time=1:10, Value=c(2, NA, NA, NA, 6, NA, NA, 7, NA, 3))

您要求的是线性插值,由R函数approxfun提供。

AF = approxfun(df[complete.cases(df),1], df[complete.cases(df),2])
ifelse(is.na(df$Value), AF(df$Time), df$Value)
 [1] 2.000000 3.000000 4.000000 5.000000 6.000000 6.333333 6.666667 7.000000
 [9] 5.000000 3.000000