首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:用根据最后值和下一个值计算的增量值填补数据空白

R:用根据最后值和下一个值计算的增量值填补数据空白
EN

Stack Overflow用户
提问于 2018-03-02 22:00:08
回答 1查看 746关注 0票数 2

我有两列:时间和价值。时间是连续的,没有任何空白。然而,值包含在随机点取样的数据,因此在值之间具有随机的数据间隔长度。

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

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

我想创建第三栏,“估计”。在这一新栏下:

  • 如果值不是空的,那么估计值=值。
  • 如果值为空,那么:(这是我遇到麻烦的部分)
    • 在“值”下,查找最后一个非NA值,找到下一个非NA值,并找到差异。
    • 取差额,除以从第一个值到下一个值的空行数。
    • 使用该数字,从最后一个非NA值到下一个非NA值递增地填写估算列。

例如,对于时间2

  • 第一个值=2(来自时间1)
  • Next值=6(来自时间5)
  • 差=4
  • 增量=4/4(因为有3个空格+具有记录值的时间5)
  • 因此,时间2的估计为第一个值+增量=2+1=3。
  • 时间3的估计值为4,时间4的估计值为5。同样,时间6为6.33,时间7为6.66,时间8的实际值为7。

从本质上说,我只是在进行一个从第一个值到下一个值的同等权重的转换。我不关心第一个值之前或最后一个值之前的任何内容(如果在时间1之前或之后有NAs )。

问题:

作为一个新手,当值为空时,我不太确定如何最好地对估计列进行编码。我尝试为具有实际值的行生成行号向量,认为我可以使用它作为索引引用。然后,我尝试执行一个循环,它将接受行A和行B(从行号的向量),计算增量,然后将增量添加到最后一个单元格中。然而,我不知道如何使两个A&B同时增加1(因此它在我的行号向量上做了一个“滚动窗口”)。我还怀疑这不是处理这个problem...but的好方法,我不知道我的选择是什么。

任何指导和指向正确的方向将是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-02 22:40:44

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

代码语言:javascript
复制
df <-data.frame(Time=1:10, Value=c(2, NA, NA, NA, 6, NA, NA, 7, NA, 3))

你想要的是线性插值,它是由R函数approxfun提供的。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49078030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档