xts对象中的Ifelse条件

时间:2015-01-02 14:04:49

标签: r if-statement xts

这是一个简单的但我自己没有得到正确的答案。 我有一个带有NA和一个

的xts对象
require(xts)
set.seed(21)
A <- xts(c(NA,NA,NA,1,NA,NA,NA,NA,NA,NA), Sys.Date()-10:1)
colnames(A) <- c("A")

我要搜索的是ifelse循环,它在1次出现后的5天内将A放入A中:

> A
            A
2014-12-23 NA
2014-12-24 NA
2014-12-25 NA
2014-12-26  1
2014-12-27 NA
2014-12-28 NA
2014-12-29 NA
2014-12-30 NA
2014-12-31  0
2015-01-01 NA

如果偶然在第一个之后的5天(即2014-12-31 = 1)也有1,则应该保留1。

1 个答案:

答案 0 :(得分:3)

lubridate包具有days功能,可以轻松地在给定日期添加天数。以下对我有用

library(lubridate)
dates.with.1 <- index(A[A==1])
plus.5.days <- dates.with.1 + days(5)
A[index(A) %in% plus.5.days & (is.na(A) | A!=1)] <- 0

最后一行的索引有点复杂,有一种更好的方法可以做到这一点。我不得不使用index,因为直接使用日期编制索引不能与布尔索引结合使用。也就是说,以下内容不起作用:

A[plus.5.days & (is.na(A) | A!=1)] <- 0