【发布时间】:2018-03-02 22:00:08
【问题描述】:
我有两列:时间和价值。时间是连续的,没有任何空白。然而,值包含在随机点采样的数据,因此在值之间存在随机长度的数据间隙。
这是一个非常简单的示例数据集:
df <-data.frame(Time=1:10, Value=c("2", NA, NA, NA, "6", NA, NA, "7", NA, "3"))
我想创建第三列“估计”。在这个新列下:
- 如果 Value 不为空,则 Estimate = Value。
- 如果 Value 为空,则:(这是我遇到问题的部分!)
- 在Value下,找到最后一个non-NA值,找到下一个non-NA值,求差
- 取差值除以从第一个值到下一个值(包括下一个值)的空行数
- 使用该数字,从最后一个非 NA 值到下一个非 NA 值递增地填写 Estimate 列
例如,对于时间 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 和 B 同时增加 1(这样它在我的行号向量下做了一个“滚动窗口”)。我也怀疑这不是解决这个问题的好方法......但不知道我的选择是什么。
任何指导和指出正确的方向将不胜感激!
【问题讨论】:
标签: r