2016-05-04 8 views
2

Hi Ich versuche, die Anzahl der Tage in Variablen Tage2010: Tage2015 zu extrahieren. Das Begattungs- und Enddatum kann ein Jahr oder länger umfassen oder auch nicht.Anzahl der Tage für Jahr mit Anfangs- und Enddatum extrahieren, die möglicherweise Jahre umfassen

df <- data.frame(BEGIN_DT = c("12/12/2013", "01/14/2013", "02/12/2012", "09/23/2013", "10/18/2013"), 
      END_DT = c("09/04/2015", "06/01/2013", "04/01/2013", "11/09/2015", "11/12/2014")) 
rownames(df) <- c(16:20) 
df$BEGIN_DT <- as.Date(df$BEGIN_DT, "%m/%d/%Y") 
df$END_DT <- as.Date(df$END_DT, "%m/%d/%Y") 


    `BEGIN_DT  END_DT 
    16 2013-12-12 2015-09-04 
    17 2013-01-14 2013-06-01 
    18 2012-02-12 2013-04-01 
    19 2013-09-23 2015-11-09 
    20 2013-10-18 2014-11-12` 

    So, for row 16, I would end up with 
    Days2012 = 19; 
    Days2013 = 365; 
    Days2014 = 365; 
    Days2015 = 246. 

Vielen Dank im Voraus!

Antwort

4

Hier ist eine Lösung, vorausgesetzt, Sie Dinge in df haben:

apply(df, 1, function(x) { 
       dates <- seq.Date(as.Date(x[1]), as.Date(x[2]), by = 'days') 
       table(format(dates, '%Y')) 
       } 
    ) 

Sie durch jede Zeile gehen, erstellen Sie eine Reihe von Daten, zu extrahieren Jahre und tun Kreuztabellen-. Dies bietet Ihnen ein Listenformat. Sie können das Ausgabeformat an Ihre Bedürfnisse anpassen.

Sie können es in einem Datenrahmen erhalten, wie folgt, vorausgesetzt, Sie die obige Ausgabe in einer Liste gespeichert l genannt:

maxLength <- max(sapply(l, length)) 
as.data.frame(t(sapply(l, function(x) 
          c(x, rep(NA, maxLength - length(x))) 
        ) 
       ) 
      ) 

    2013 2014 2015 
16 20 365 247 
17 139 NA NA 
18 324 91 NA 
19 100 365 313 
20 75 316 NA 
+0

Der Befehl gilt bereits eine Liste enthält, hinzugefügt ich Code-Datenrahmen zu konvertieren, wie eine Option. – Gopala

+0

Das ist perfekt! Vielen Dank für Ihre sehr hilfreiche Antwort! – Borderlands54

+0

Ja, das habe ich endlich herausgefunden. Vielen Dank. Ich habe es jetzt in einem Datenrahmen. Jetzt muss ich das nur auf meinen tatsächlichen df anwenden. Danke noch einmal! – Borderlands54

Verwandte Themen