2015-03-10 17 views
5

posso ottenere la data odierna:R: ottenere ultima data di Venerdì

Sys.Date() 

Ma come faccio a ottenere l'ultima data di Venerdì? ho provato:

library(xts) 
date1 <- Sys.Date() 
to.weekly(date1) 

Ma questo dà un errore.

Grazie per il vostro aiuto

risposta

9

Penso che questo dovrebbe funzionare:

library(lubridate) 

Sys.Date() - wday(Sys.Date() + 1) 
1

Venerdì scorso è stato di 4 giorni fa, in tal modo:

Sys.Date()-4 

> Sys.Date()-4 
[1] "2015-03-06" 

o per qualsiasi giorno della settimana, utilizzando base:

Sys.Date()-(as.POSIXlt(Sys.Date())$wday+2) 
+1

Mi aspetto che l'OP desideri che funzioni per più di martedì. – CephBirk

+1

Sebbene possa essere vero, non è stato specificato. Ho aggiunto una soluzione usando 'base'. –

5

Ecco una funzione che trova l'ultima data per qualsiasi giorno della settimana:

getlastdate <- function(day) { 
library(lubridate) 
dates <- seq((Sys.Date()-7), (Sys.Date()-1), by="days") 
dates[wday(dates, label=T)==day] 
} 

getlastdate("Mon") 

# "2015-03-09" 

Immettere il giorno della settimana in formato abbreviato: vale a dire

Sun Mon Tues Wed Thurs Fri Sat 
10

Prova questa:

library(zoo) 
lastfri(Sys.Date()) 

dove lastfri è uguale alla funzione di linea singola nextfri nella vignetta di questo zoo, zoo quickref vignette, ad eccezione di ceiling viene sostituito con floor. Si noti che lastfri è vettorizzato, cioè può prendere un vettore di date di input e produrre un vettore di date di output. Ad esempio,

library(zoo) 
Sys.Date() 
## 2015-03-10 
lastfri(Sys.Date() + 0:6) 
## [1] "2015-03-06" "2015-03-06" "2015-03-06" "2015-03-13" "2015-03-13" 
## [6] "2015-03-13" "2015-03-13" 

Così lo scorso Venerdì era il 6 marzo e ci continuo a ricevere 6 marzo fino al giorno avanza a Venerdì prossimo a questo punto il Venerdì scorso è 13 marzo.

A parte: il prossimo venerdì è venerdì 13.

+0

Sicuramente non mi aspettavo che ci fosse una funzione pronta per questo. Freddo. –

Problemi correlati