Ответ 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"
У меня есть данные о погоде на 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.
Это работает?
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"
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)