我在时间序列数据上做了很多工作,我想删除几天(特别是白天节省的日子)。所以我有一个日期列表:
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来挑选这些日子,但我不知道如何去除这些天?
答案 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