R删除天数列表

时间:2013-10-08 09:47:47

标签: r date xts

我在时间序列数据上做了很多工作,我想删除几天(特别是白天节省的日子)。所以我有一个日期列表:

days <- c("2009-03-20", "2009-10-25", "2010-03-28", "2010-10-31", 
"2011-03-27", "2011-10-30", "2012-03-25", "2012-10-28", "2013-03-31")

我想删除这些天的所有观察结果。现在,这是我的数据:

dato <-seq(as.POSIXlt("2009-01-01"), as.POSIXlt("2013-10-08"), "hour")
x<-runif(41784)*100
y<-runif(41784)*100
df<-cbind(dato, x, y)

我可以用xts来挑选这些日子,但我不知道如何去除这些天?

2 个答案:

答案 0 :(得分:1)

在我看来,您的问题是您的日期格式为yyyy-mm-dd,但您的dato列的格式为小时。如果您重新格式化dato列或添加格式化日期的列,则应该可以使用%in%否定删除这些日期。如果您运行下面的代码并检查mydf2,您会发现它不再包含drop.days中日期的任何行。具体来说,您不需要xts(尽管它包含很好的子集函数)。

mydf <- data.frame(hours = seq(as.POSIXlt("2013-10-01"),
                       as.POSIXlt("2013-10-08"), "hour"),
                   val1 = runif(169)*100,
                   val2 = runif(169)*100)

mydf$date <- format(mydf$hours, format = "%Y-%m-%d")

unique(mydf$date)

drop.days <- c('2013-10-03','2013-10-04')

mydf2 <- mydf[!(mydf$date %in% drop.days), ]

答案 1 :(得分:1)

days <- c("2009-03-20", "2009-10-25", "2010-03-28", "2010-10-31", 
          "2011-03-27", "2011-10-30", "2012-03-25", "2012-10-28", "2013-03-31")
days <- as.Date(days) # convert to Date
dato <-seq(as.POSIXlt("2009-01-01"), as.POSIXlt("2013-10-08"), "hour")
x <- runif(41784)*100
y <- runif(41784)*100
df <- data.frame(dato, x, y) # convert to data.frame not matrix
df_1 <- subset(df, !as.Date(dato) %in% days) # remove days