#r #dataframe #date #dplyr #as.date
#r #фрейм данных #Дата #dplyr #as.date
Вопрос:
Мои извинения, я, похоже, не могу найти решение этого, казалось бы, основного вопроса.
Это
p %>% mutate(date = as.Date(mr_daterd, format = '%d/%m/%Y'), mr_daterd = mr_daterd)
Дает
mr_daterd date
1 28/03/2013 2013-03-28
2 10/01/2009 2009-01-10
3 16/09/2005 2005-09-16
4 28/03/2013 2013-03-28
5 28/03/2013 2013-03-28
6 28/03/2013 2013-03-28
Мне нужно p$date
быть dd/mm/yyyy
.
p <- structure(list(mr_daterd = c("18/03/2011", "10/01/2009", "10/01/2009",
"11/03/2004", "10/01/2009", "18/03/2011", "16/09/2005", "10/01/2009",
"18/03/2011", "10/01/2009", "18/03/2011", "18/03/2011", "28/03/2013 ",
"28/03/2013 ", "10/01/2009")), row.names = c(NA, -15L), class = "data.frame")
Комментарии:
1. Попробуйте это:
p %>% mutate(date = as.Date(mr_daterd, format = '%d/%m/%Y'), mr_daterd = mr_daterd,date2=format(date,'%d/%m/%Y'))
2. Также смотрите
date2
, какой стиль вы хотите. Даты вR
хранятся какyear-month-day
, если вы хотите их изменить, вы должны использоватьformat()
.3. Спасибо @Duck. Кажется, что в вашем решении мне нужно выполнить два шага: сначала создать
date=as.Date..
, а затем создатьdate2=format..
изdate
— разве нет решения, которое выполняет то, что я запрашиваю, в одной строке? Я пыталсяdate=format(as.Date(mr_daterd, format = '%d/%m/%Y'),'%d/%m/%Y')
, но это не помогло.4. Может быть, попробуйте это
p %>% mutate(date=format(as.Date(mr_daterd, format = '%d/%m/%Y'),'%d-%m-%Y'))
5. cmirian, ваши даты уже указаны в формате «dd / mm / yyyy». Если вы хотите, чтобы они были фактическими объектами даты в R, они сохраняются и отображаются в
yyyy-mm-dd
формате. При использованииformat
вы преобразуете их обратно в символы. Если вам нужно отобразить даты определенным образом для определенного вывода, вы делаете это как «последнее» после обработки ваших дат.
Ответ №1:
Один из способов добиться того, чего вы хотите, — создать свой собственный класс S3. Это не так сложно, как кажется, требуется всего две строки кода:
as.myDate <- function(x, ...) `class<-`(as.Date(x, ...), c("myDate", "Date"))
format.myDate <- function(x, ...) format(`class<-`(x, "Date"), "%d/%m/%Y")
Затем это позволяет вам сделать:
p$date <- as.myDate(p$mr_daterd, format = "%d/%m/%Y")
p
#> mr_daterd date
#> 1 18/03/2011 18/03/2011
#> 2 10/01/2009 10/01/2009
#> 3 10/01/2009 10/01/2009
#> 4 11/03/2004 11/03/2004
#> 5 10/01/2009 10/01/2009
#> 6 18/03/2011 18/03/2011
#> 7 16/09/2005 16/09/2005
#> 8 10/01/2009 10/01/2009
#> 9 18/03/2011 18/03/2011
#> 10 10/01/2009 10/01/2009
#> 11 18/03/2011 18/03/2011
#> 12 18/03/2011 18/03/2011
#> 13 28/03/2013 28/03/2013
#> 14 28/03/2013 28/03/2013
#> 15 10/01/2009 10/01/2009
Этот новый класс наследует все другие общие функции от «Date», поэтому он по-прежнему будет вести себя так же, как объект Date:
difftime(p$date[2], p$date[1])
#> Time difference of -797 days
plot(p$date, rnorm(15))