使用R中的先前值来计算NA值

时间:2018-02-26 14:26:31

标签: r

我们有101个变量(公司)的收盘价。我们得到了很多NA值(因为股票市场在星期六和星期日关闭 - >在我们的数据中给出了NA值)并且如果有先前的价值我们需要用前一个值来估算那些NA值但是我们不成功。 This is our data example

也有一些公司在头几年没有数据,因为他们不在股票市场,所以他们在这个时期有NA值。有些公司破产并开始拥有NA值,因此这些都应该变为0。 我们应该如何做到这一点,因为我们有几个条件来填补我们的NA

提前致谢。

1 个答案:

答案 0 :(得分:0)

我对规则的理解是:

  • 所有NA的列都将保留为所有NA
  • 前导NA值保留为NA
  • 内部NA值将替换为最新的非NA值
  • 尾随NA值替换为0

为了尝试这一点,我们使用内置数据框BOD将第一行,第三行和最后一行替换为NA并添加一列NA值 - 请参阅注释结束。

我们定义一个逻辑向量ok,每列有一个元素,TRUE用于列中至少有一个元素不是NAFALSE用于其他列。然后仅对okTRUE的列进行操作,我们使用NA使用0填充尾随的na.fill值。然后我们使用na.locf填充内部NA值。

library(zoo)

ok <- !apply(is.na(BOD), 2, all)
BOD[, ok] <- na.locf(na.fill(BOD[, ok], c(NA, NA, 0)), na.rm = FALSE)

,并提供:

  Time demand  X
1   NA     NA NA  <-- leading NA values are left intact
2    2   10.3 NA
3    2   10.3 NA  <-- interior NA values are filled in with last non-NA value
4    4   16.0 NA
5    5   15.6 NA
6    0    0.0 NA  <- trailing NA values are filled in with 0

注意

我们使用了以下输入:

BOD[c(1, 3, 6), ] <- NA
BOD <- cbind(BOD, X = NA)

更新

修正。