0

我在时间序列数据上做了很多工作,我想删除几天(特别是夏令时)。所以我有一个天的清单:

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 挑出日子,但我不知道如何删除这些日子?

4

2 回答 2

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
于 2013-10-08T12:58:54.827 回答
1

在我看来,您的问题是您的日期格式为 yyyy-mm-dd,但您的dato专栏以小时为单位。如果您重新格式化该dato列或添加带有格式化日期的列,您应该能够使用%in%negated 删除那些日子。如果您运行下面的代码并检查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), ]
于 2013-10-08T12:27:12.567 回答