#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 ).