2013-10-08 85 views
0

我在時間序列數據上工作很多,我想刪除多個天(特別是夏令時)。所以我有一個天數列表:R刪除天數列表

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,但我不能想出如何刪除這些天?

回答

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), ] 
+0

尼斯明顯的例子/解釋。我發現處理日期很棘手,因爲每個人對他們有不同的看法,xts,動物園,鉻合金,RcppBDT等等?所以作爲一個新的R用戶,很高興看到這是非常簡單和直接的做法。 – NoThanks

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