删除r中特定日期之间的数据

时间:2015-08-06 13:06:18

标签: r

我可以使用R中的多边形函数在数字上指定我想在我的数据中排除的日期:

require(gamair)
data(cairo)
data1 <- within(cairo, Date <- as.Date(paste(year, month, day.of.month, sep = "-")))
data1 <- data1[,c('Date','temp')]
plot(data1)
dd <- data.frame(year = seq(1995,2005),
                 istart = c(341,355,356,370,371,380,360,400,378,360,360),
                 iend = c(450,400,380,390,420,410,425,450,421,430,400))

dates <- paste(dd[,1], '-01', '-01', sep = '')
istart <- as.Date(dates) + dd[,2]
iend <- as.Date(dates) + dd[,3]

for (i in 1:length(iend)){
  polygon(c(istart[i],iend[i],iend[i],istart[i]),c(0,0,110,110),
          col=rgb(1, 0, 0,0.5), border=NA)
}

enter image description here

我现在想知道是否可以从data_1中删除这些突出显示的时间以生成不包含这些突出显示值的新时间序列data_2?

我可以删除istart和iend中指定的各个日期,但似乎无法删除这些日期之间的值范围。怎么办呢?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

ret <- rep(FALSE, NROW(data1))
for (i in seq_along(istart)) {
    ret <- ret | ((data1$Date >= istart[i]) & (data1$Date <= iend[i]))
}
data2 <- data1[!ret, ]
plot(data2, pch = ".")
for (i in 1:length(iend)){
  polygon(c(istart[i],iend[i],iend[i],istart[i]),c(0,0,110,110),
          col=rgb(1, 0, 0,0.5), border=NA)
}

因此,对于istartiend的每个值,您可以创建一个逻辑值向量,其中包含这些区间之一内的所有值。然后,您需要做的就是在这些时间间隔内选择的所有data1行。

(我将绘图符号更改为.,以使所有值确实被过滤掉更明显。

enter image description here

答案 1 :(得分:0)

使用mapply,您可以定义日期的向量,您希望从数据中排除这些日期。

exclude = unlist(mapply(function(istart, iend) {seq(istart, iend, "days")}, istart, iend))
data1 = data1[!(data1$Date %in% exclude), ]

另外,有一种更短的方法来定义你的istart和iend向量:

istart = seq(as.Date("1995-01-01"), as.Date("2005-01-01"), "years") + c(341,355,356,370,371,380,360,400,378,360,360)
iend = seq(as.Date("1995-01-01"), as.Date("2005-01-01"), "years") + c(450,400,380,390,420,410,425,450,421,430,400))