Предположим, что вы начинаете с вектором дат в формате фактора:
x<- as.factor(c("8/7/2006", "12/13/2006", "12/14/2006"))
Сначала вы должны преобразовать этот вектор в формате Date. В вашем случае это может быть сделано как этот
x<- as.Date(x, format= "%m/%d/%Y")
Использование команды форматирования вы можете удалить день определенной даты:
format(x, "%Y %m")
> "2006 08" "2006 12" "2006 12"
Таким образом, вы избавитесь от дня и просто держать год и месяц. Далее определяют опорный вектор, который содержит все месяцы с апреля 2006 года по август 2016 года:
ref<- seq(from= as.Date("04/01/2006", format= "%m/%d/%Y"), to= as.Date("08/01/2016", format= "%m/%d/%Y"), length.out = 125)
ref<- format(ref, "%Y %m").
Наконец вы сравните записи из х с элементами из исх. Это можно сделать с помощью функции sapply, которая в основном применяет функцию к каждому компоненту x. Здесь функция это применяется функция:
myfun<-function(z) {
which(ref == format(z, "%Y %m"))
}
Но так как вы не нужны функции myfun в другом месте вы можете напрямую подключить его к sapply Funtion. В конце вы используете команду unlist, поэтому вы получаете вектор.
sapply(x, function(z) which(ref == format(z, "%Y %m")))
> 6 10 10
следует сделать трюк.
"формат"? Вы имеете в виду, что они относятся к классу 'Date'? Или что-то другое? – Gregor
, если ваши данные упорядочены, как вы уже упоминали, добавьте новый столбец в ваш набор данных, используя 'seq (1,125)' – theArun
Дата в типе фактора. – kbsudhir