2013-10-08 1 views
0

나는 시계열 데이터에 대해 많은 연구를하고 있으며, 일 (daylight-savings) 일 수를 제거하고 싶습니다. 따라서 일 목록이 있습니다 :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