Удалить год из даты в R

У меня есть данные о погоде на 20 лет, но меня интересуют только модели в год. Меня не волнует, например, как в июне 1995 года отличается от июня 2011 года. Вместо этого я хочу иметь 20 значений для значений 1 июня, 20 для 2 июня и т.д.

Мой вопрос: как мне удалить часть года объекта даты, сохранить месяц и день, а также сохранить последовательные свойства дат? Моя конечная цель - длинный список повторяющихся значений mm/dd, соответствующих каждой переменной результата. Я рассмотрю аналогичные факторы mm/dd, но в правильном порядке.

# Given this:
as.Date(c("2014-06-01","1993-06-01", "2013-06-03", "1999-01-31"), "%Y-%m-%d")
# I want to get this:
"06-01" "06-01" "06-03" "01-31"
# That will sort like this
"01-31" "06-01" "06-01" "06-03"

Маленькие хаки, такие как использование sub(), чтобы отбросить год и преобразовать тире в десятичную строку, не работают, потому что 1-е число месяца совпадает с 10-м месяцем. Я также попытался превратить даты в строки символов, удалив год, а затем вернувшись к дате... это всего лишь год 2014.

Ответ 1

Это работает?

temp<-as.Date(c("2014-06-01","1993-06-01", "2013-06-03", "1999-01-31"), "%Y-%m-%d")

x<-format(temp, format="%m-%d")

 x
[1] "06-01" "06-01" "06-03" "01-31"


sort(x)
[1] "01-31" "06-01" "06-01" "06-03"

Ответ 2

jalapic ответ перед моим, преобразует столбец даты в вектор символа (объект, переданный в формат, возвращается как символ для довольно печати).

согласно OP, одна из причин избавления от года, возможно, ключевая, заключается в том, чтобы свертываться к деньгам и месяцам, независимо от года. Для меня это предполагает, что временный ряд не является правильным типом данных для этого столбца, вместо этого вам будет лучше с упорядоченным фактором, который сохранит "последовательные свойства дат", как требует OP.

это в значительной степени

Конечно, фактор не понимает даты или числа, но он понимает уникальные ценности, которые, по крайней мере, в этом случае, он должен вести себя так, как хочет OP

> d = "2014-06-01"
> d = as.Date(d)

fnx = function(x) {
         unlist(strsplit(as.character(x), '[19|20][0-9]{2}-', fixed=FALSE))[2]
     }

> dm("2012-01-25")
    [1] "01-25"

> dm1 = sapply(column_of_date_objs, fnx)

> new_col = as.factor(dm1, ordered=TRUE)