2015-04-23 4 views
0

То, что я пытаюсь сделать, - рассчитать общие дни между двумя датами. Если даты в формате «гггг мм дд//» Я сделал это так:R разница между датами в разных форматах

EndDate <- "2012/02/01" 
StartDate <- "1900/01/01" 
DiffBewtweenDates <- data.frame(date=c(EndDate),start=c(StartDate)) 
DiffBewtweenDates$date_diff <- as.Date(as.character(DiffBewtweenDates$date), format="%Y/%m/%d")- 
as.Date(as.character(DiffBewtweenDates$start), format="%Y/%m/%d") 
DiffBewtweenDates 

И это сработало. Но мне предлагается получить хотя бы EndDate в этом формате «FullDayName, DayNumber of FullMonthName of FullYearNumber». Что-то вроде этого «Воскресенье, 1 февраля 2012 года».

Как я понимаю в руководстве R, это было бы ... format="%A, %d of %B of %Y" Но это не сработает, и я не могу понять, почему.

Заранее благодарим за любую идею.

+0

Как вы используете его? Как и во время использования as.Date, формат, который вы предоставляете, представляет собой формат входной строки, а не выход. – Avinash

ответ

1

Может быть, вы должны изменить локаль на английском:

Sys.setlocale("LC_TIME", "english") 
date <- "Sunday, 1 of February of 2012" 
lubridate::guess_formats(date, orders = "dmy") 
#     dmy 
# "%A, %d of %B of %Y" 

as.Date(date, guess_formats(date, orders = "dmy")) 
# [1] "2012-02-01" 

Во всяком случае, вы можете использовать функцию lubridate, чтобы угадать форматы для многих строк даты.

1

Просто вычислить разницу в днях, и получить желаемый выход вы можете сделать

Sys.setlocale("LC_TIME", "C") 
EndDate <- as.Date("2012/02/01", format = "%Y/%m/%d") 
StartDate <- as.Date("1900/01/01", format = "%Y/%m/%d") 

EndDate - StartDate    
# Time difference of 40938 days 

format(EndDate, "%A, %d of %B of %Y") 
# [1] "Wednesday, 01 of February of 2012" 
Смежные вопросы