我有两列:时间和价值。时间是连续的,没有任何空白。但是,值包括在随机点采样的数据,因此在值之间具有随机长度的数据间隙。
这是一个非常简单的样本数据集:
df <-data.frame(Time=1:10, Value=c("2", NA, NA, NA, "6", NA, NA, "7", NA, "3"))
我想创建第三列,&#34; Estimate&#34;。在这个新专栏下:
例如,对于时间2
基本上我只是从第一个值到下一个值进行同等加权的转换。我不关心第一个值或最后一个值之前的任何事情(如果在时间1之前或时间10之后有NA)。
问题:
作为一个非常新手,当Value为空时,我不太确定如何最好地编写Estimate列的编码。我已经尝试为具有实际值的行生成行号向量,以为我可以将其用作索引引用。然后我尝试做一个循环,它将采用行A和行B(从行号的向量),计算增量,然后将增量添加到最后一个单元格。但是,我无法弄清楚如何制作A&amp; A; B同时增加1(这样它就是#34;滚动窗口&#34;向下我的行数向量)。我也怀疑这不是解决这个问题的好办法......但不知道我的选择是什么。
非常感谢任何指导并指出正确的方向!
答案 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