2012-11-08 20 views
5

Ho una serie di eventi che hanno ciascuno una data di inizio e di fine, ma hanno luogo per un numero di mesi. Vorrei creare una tabella che mostri il numero di giorni in ciascun mese per questo evento.Calcolo dei giorni al mese tra un intervallo di due date

Ho il seguente esempio.

event_start_date <- as.Date("23/10/2012", "%d/%m/%Y") 
event_end_date <- as.Date("07/02/2013", "%d/%m/%Y") 

mi aspetto di ottenere un tavolo come il seguente:

Oct-12 8 
Nov-12 30 
Dec-12 31 
Jan-13 31 
Feb-13 7 

Qualcuno sa di un modo intelligente ed elegante di fare questo o è la creazione di un sistema di anelli l'unico metodo praticabile?

Jochem

+1

Penso che si possa semplicemente sottrarre la data, vedere http://stackoverflow.com/questions/2254986/how-to-subtract-days-in-r – DjSol

risposta

6

Questo non è necessariamente efficace perché crea una sequenza di giorni, ma non il lavoro:

> library(zoo) 
> table(as.yearmon(seq(event_start_date, event_end_date, "day"))) 

Oct 2012 Nov 2012 Dec 2012 Jan 2013 Feb 2013 
     9  30  31  31  7 

Se il lasso di tempo è così grande di questo metodo è lento, si dovrà creare un sequenza di primi dei mesi tra le due date (troncate), prendi lo diff e fai un piccolo lavoro extra per i punti finali.

1

Come DjSol già sottolineato nel suo commento, si può semplicemente sottrarre due date per conoscere il numero di giorni:

event_start_date <- as.Date("23/10/2012", "%d/%m/%Y") 
event_end_date <- as.Date("07/02/2013", "%d/%m/%Y") 
as.numeric(event_end_date - event_start_date) 

E 'questo che vuoi? Ho la sensazione che potresti avere più problemi a ottenere la data di inizio e di fine in tale formato in modo da poterli sottrarre facilmente perché menzioni un loop. Se è così, tuttavia, credo che abbiamo bisogno di maggiori dettagli su come appaiono i tuoi dati reali.

+0

Grazie DjSol e Christoph_J, sono a conoscenza di questo concetto, ma Sono particolarmente interessato a ottenere i giorni assegnati a mesi come nella tabella presentata. Naturalmente questo può essere fatto con un ciclo e mese_end - mese_start. Ma mi chiedo se c'è un metodo più elegante per realizzarlo? – Jochem

+0

Il mio male! Ora capisco cosa vuoi fare. Ma la risposta di flodel sembra essere un buon punto di partenza. –

Problemi correlati