2016-07-08 21 views
0

Ich versuche, Sapply zu verwenden, um das maximale Datum in einer Spalte zu erhalten, aber es gibt eine Zahl anstelle eines Datums zurück. Irgendeine Idee, wie man das löst? Ich kann nicht scheinen, um herauszufinden, warum dies auftritt ..Maximales Datum in Spalte R mit sapply

mtcars$datecolm = '2015-03-03' 
mtcars$datecolm[1] = '2015-09-09' 
    mtcars$datecolm = as.Date(mtcars$datecolm) 

    sapply(mtcars, max) # why is it returning a number instead of a date?? 
    max(mtcars$datecolm) # works correctly 

Bitte benutzen Sie sapply angesichts der Art, wie ich dies eingerichtet haben ... Ich weiß, das funktioniert mit Anwendung (mtcars, 2, max).

+0

Um numerische Datumsform in eine lesbare Datumsform umzuwandeln, transformieren Sie einfach Ihre Datecolm-Spaltendaten. z.B. 'as.Date (16687, origin =" 1970-01-01 ")' –

Antwort

2

Wir brauchen lapply verwenden statt sapply

lapply(mtcars, max) 

als sapply kehrt ein vector wegen der simplify=TRUE Standardargument und vector nur eine einzige Klasse halten kann. Da es numerische Spalten gibt, wird die Spalte "Datum" (die als Integer gespeichert ist) auf den Wert integer gezwungen. Wir können jedoch immer noch verwenden, wenn wir simplify = FALSE verwenden, um eine list zurückzugeben.

sapply(mtcars, max, simplify = FALSE) 

In Bezug auf die Verwendung von apply

apply(mtcars,2,max) 

würde ich nicht, da dies nur eine einzige Klasse halten kann Matrix und Matrix konvertiert mit apply empfehlen. Hier wird alles character ausgegeben, da die Klasse 'Date' in character konvertiert wurde.


In Bezug auf das Problem von OP in den Kommentaren erwähnt, als wir ausgegeben haben, die andere Klasse gehören, entweder wir list oder data.frame nutzen könnten (wie data.frame ein list ist) als c dh verketten eine vector zurückkehrt und als oben erwähnt, kann es nur eine einzige Klasse halten.

do.call(rbind, lapply(mtcars, function(x) 
      data.frame(Class=class(x), Max=max(x, na.rm=TRUE)))) 
+0

Ich habe versucht, so etwas zu verwenden, und es funktioniert nicht - --- as.data.frame (lapply (mtcars, function (x) c (class (x), max (x, na.rm = TRUE)))) – runningbirds

+0

@runningbirds Ich habe den Beitrag mit dem von Ihnen erwähnten Problem aktualisiert – akrun