R: ежедневные данные в ежемесячные

#r #time-series #xts

#r #временные ряды #xts

Вопрос:

У меня есть большой объект xts с несколькими переменными. Таким образом, индекс является ежедневным, он соответствует точным дням, однако для каждой переменной в месяц выполняется только одно наблюдение. Есть ли способ удалить день из индекса и сохранить только год-месяц?

Чтобы проиллюстрировать мою проблему, например, у меня есть var1 с наблюдением 2011-06-28 и var2 с наблюдением 2011-06-30. Я хотел бы проиндексировать оба как 2011-06

Спасибо

Комментарии:

1. Добро пожаловать в stack overflow: может быть, было бы хорошо, если бы вы отредактировали заголовок своего вопроса так, чтобы другие люди могли легко найти его при поиске в Google. Например. «Как изменить ежедневные данные на ежемесячные в объекте xts в R?»

Ответ №1:

в качестве альтернативы вы могли бы «сообщить» R, что вы используете даты определенного формата с as.Date() помощью функции, а затем использовать format() для изменения его на желаемый формат. Вот так:

 dates=c("2011-06-28","2011-06-29","2011-06-30","2011-07-1") #test string with dates in original format

dates2 <- format(as.Date(dates,"%Y-%m-%d"), format="%Y-%m") #changing the "%Y-%m-%d" format to  the desired "%Y-%m"

print(dates2) 
 

Редактировать: Если вы хотите изменить только индекс xts:
indexFormat(xts_object) <- "%Y-%m"

Твое здоровье, Крис

Комментарии:

1. спасибо, однако для меня это работает только частично. Это действительно сокращает время суток, но и улучшает характер. Когда я пытаюсь использовать as.Date(), он возвращает значения NA. Я не понимаю, почему?

2. это не работает, потому что as.Date() не принимает «%Y-%m» в качестве приемлемого формата даты (например, ему нужен день). Если вы все еще хотите что-то с этим сделать, вы можете либо попробовать as.factor(), либо использовать as.yearmon() из пакета zoo (возможно, лучше). Кстати, если вы хотите изменить только свой индекс xts, я отредактировал свой первоначальный пост о том, как это сделать.

Ответ №2:

Вероятно, вы можете сделать это: используйте gsub (замените шаблон на любой, который вы хотите) с помощью regex (последовательность символов, которые определяют шаблон поиска, например, в строке). Шаблон выполняется с помощью регулярных выражений, которые содержат множество метасимволов, позволяющих выполнять более сложные действия. Точка (.) — это подстановочный знак, а $ привязывает его сзади. Таким образом, шаблон в основном состоит из любых 3 символов до конца и заменяет их ничем.

 your_object<-c("2011-06-28","2011-06-30")
gsub(pattern = "...$", replace = "", x = your_object)
 

Вот руководство по использованию gsub с регулярным выражением (http://uc-r.github.io/regex ).