Können data.table-Funktionen Datums- und Uhrzeitspalten im laufenden Betrieb bearbeiten?

  • Ich habe mit data.table angefangen. In der Tat ist es eine sehr schnelle und recht schöne Syntax. Ich habe Probleme mit Terminen. Ich benutze gerne Lubridat. In vielen meiner Datensätze habe ich Datum oder Datum und Uhrzeit und habe sie mit Lubridate manipuliert. Lubridate speichert den Moment als POSIX-Klasse. Ich habe hier Antworten gesehen, die neue Variablen erstellen, um beispielsweise das Jahr zu erhalten. 2005. Das gefällt mir nicht. Es gibt Zeiten, in denen ich nach Jahr und zu anderen Zeitpunkten nach Quartal und zu anderen Zeitpunkten nach Monat und zu anderen Zeitpunkten nach Dauer analysiere. Ich möchte etwas einfaches tun, wie dieses

     mydatatable[,length(medical.record.number),by=year(date.of.service)]
     

    , das mir die Anzahl der Begegnungen des Patienten in einem geben soll gegebenes Jahr. Die by-Funktion funktioniert nicht.

     Error in names(byval) = as.character(bysuborig) : 
      'names' attribute [2] must be the same length as the vector [1]
     

    Können Sie mich auf Vignetten verweisen, bei denen data.tables mit Datumsangaben verwendet wird und wo Manipulationen und Kategorisierungen von Diese Daten werden im laufenden Betrieb erstellt.

    22 November 2011
    Farrel
1 answer
  • Verwendet eines der Beispiele auf der Seite help(IDateTime). Es zeigt, dass Sie die Syntax für das Argument by= nicht zu einem Zeichenwert in der Form "=" ändern können, oder (nach dem Kommentar von @Matthew Dowle unten) können Sie versuchen, die von Ihnen verwendete Funktionsform zu verwenden (obwohl ich dies nicht habe Ich habe die bevorzugte Form bekommen: by=list(wday=wday(idate)).) Beachten Sie, dass die Schlüsselerstellung eine IDateTime-Klasse voraussetzt, da es keine idate - oder itime -Variable gibt. Dies sind Attribute der Klasse

     datetime <- seq(as.POSIXct("2001-01-01"), as.POSIXct("2001-01-03"), by = "5 hour")    
    (af <- data.table(IDateTime(datetime), a = rep(1:2, 5), key = "a,idate,itime"))
    
     af[, length(a), by = "wday = wday(idate)"]
             wday V1
    [1,]    2  4
    [2,]    3  5
    [3,]    4  1
     
    22 November 2011
    42-