2015-09-04 2 views
0

У меня есть 3 вектора, dates, fromDates и toDates. Как извлечь даты, которые находятся между fromDates[1] и toDates[1], fromDates[2] и toDates[2] и т.д.извлечение нескольких сегментов из вектора в R

Вот пример. Я пытался использовать даты [между (date, fromDates, toDates)], но результат неверен и есть некоторые предупреждения.

> dates=seq(Sys.Date(),length=1499,by="-1 day") 
> head(dates) 
[1] "2015-09-04" "2015-09-03" "2015-09-02" "2015-09-01" "2015-08-31" "2015-08-30" 
> toDates=seq(Sys.Date()-as.integer(runif(1)*365),length=3,by="-1 year") 
> toDates 
[1] "2015-08-13" "2014-08-13" "2013-08-13" 
> fromDates=toDates-3 
> fromDates 
[1] "2015-08-10" "2014-08-10" "2013-08-10" 
> dates[between(dates,fromDates,toDates)] 
[1] "2015-08-11" "2014-08-12" "2013-08-13" "2013-08-10" 
Warning messages: 
1: In `>=.default`(x, lower) : 
    longer object length is not a multiple of shorter object length 
2: In `<=.default`(x, upper) : 
    longer object length is not a multiple of shorter object length 

Как извлечь сегменты без использования петли? Решение, где fromDates и toDates не являются векторами, но некоторые другие простые структуры также будут оценены.

Спасибо.

+0

Пожалуйста, смотрите, как сделать [Minimal, полный и проверяемый пример] (HTTP://stackoverflow.com/help/mcve) или [Как сделать отличный воспроизводимый пример R] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – N8TRO

+0

В какой пакет включена функция 'между '? –

ответ

1

Не очень понятно, что вы просите, но я хотел бы попробовать что-то вроде следующего с вашим примером:

dates[(
    findInterval(dates,c(rbind(rev(fromDates),rev(toDates)))) 
    %% 2) ==1] 
+0

Большое спасибо. Это решило мою проблему. – sofq

Смежные вопросы