2015-03-20 4 views
6

Sembra che Internet non abbia ancora risposto a questa domanda per R:Come trovare Domenica precedente in R

Se ho una data. Dì il 20 marzo: as.Date ("2015-03-20") come ottengo, in R, la domenica precedente? , ad esempio nell'esempio sopra, as.Date ("2015-03-15").

+0

Grazie a tutti per le vostre risposte veloci !! Se avessi saputo che la gente avrebbe risposto così in fretta, non avrei passato tutto questo tempo a leggere la documentazione prima di pubblicare la mia domanda! –

+2

No, per favore non saltare a questa conclusione! –

+0

ok, non voglio;) ---------------- –

risposta

5

Ecco un approccio:

d <- as.Date("2015-03-18") 
prev.days <- seq(d-6,d,by='day') 
prev.days[weekdays(prev.days)=='Sunday'] 
# [1] "2015-03-15" 
9

Leggendo la documentazione di Lubridate, ho trovato una risposta.

library(lubridate) 
date <- as.Date("2015-03-20") 
previous_sunday <- floor_date(date, "week") 

Per ottenere lunedi precedente, Ma, ecc basta aggiungere il numero di giorni: (per lunedi)

day(date)<-day(date)+1 

e sottrarre 7 giorni se è maggiore rispetto alla data originale.

4

Un modo:

d<-as.Date("2015-03-20") 
d-as.POSIXlt(d)$wday 
## [1] "2015-03-15" 

Ci; s anche il modo più hacker, sfruttando il fatto che le date sono rappresentati come interi con Zero Day essere un Giovedi (1 gennaio 1970):

d-((as.numeric(d)+4)%% 7) 
## [1] "2015-03-15" 
2
cut(date_var, breaks='week', start.on.monday = F) 

Th è un lavoro per me. È disponibile in base r ed è destinato ad essere più veloce. interruzioni può essere utilizzato per trovare l'inizio di giorno, settimana, mese, trimestre, anno.

Leggi? Tagliato & ? Cut.Date

Sys.Date() 

[1] "2017/12/23"

cut(Sys.Date(), breaks = 'week', start.on.monday = F) 

[1] 2017- 12-17 Livelli: 2017-12-17

cut(Sys.Date(), breaks = 'month') 

[1] 2017-12-01 Livelli: 2017-12-01

cut(Sys.Date(), breaks = 'quarter') 

[1] 2017-10-01 Livelli: 2017- 10-01

cut(Sys.Date(), breaks = 'year') 

[1] 2017-01-01 Livelli: 2017-01-01

+0

Questo mi sembra il modo canonico di farlo. –