So finden Sie das höchste (neueste) und das niedrigste (früheste) Datum [R]
Versuche ich zu verwandeln, zwei Spalten in mein dataframe zu den 'guten' Datum & Zeit-Klasse, und bis jetzt nicht viel Erfolg haben. Ich habe versucht verschiedene Klassen (timeDate
Date
timeSeries
POSIXct
POSIXlt
) aber ohne Erfolg. Vielleicht bin ich gerade mit Blick auf die offensichtlichen und da habe ich versucht, so viele Ansätze, ich weiß nur nicht, was was ist mehr. Ich hoffe einige von Euch können etwas Licht auf, wo ich schief gehen.
Ziel:
Ich möchte zur Berechnung der Differenz zwischen zwei Datumsangaben mit den frühesten und den spätesten Termin. Ich habe diese Arbeit mit head()
und tail()
sind, sondern weil diejenigen, die Werte sind nicht notwendig, das früheste und späteste Datum in meinen Daten, ich brauche einen anderen Weg. (Ich kann nicht Holen Sie sich die Sortierung der Daten zu arbeiten, weil es sortiert die Daten nur auf den Tag des Datums.)
Zweite Ziel: ich möchte zum konvertieren der Daten aus dem täglichen format (d.h. 8-12-2010) , wöchentlich, monatlich und jährlich Ebenen (D. H. '49-2010', 'Dezember-10', und nur '2010'). Diese kann getan werden, mit dem format-Einstellungen (wie %d-%m-%y
). Kann das mit der Konvertierung der Daten.Rahmen, um eine Zeit-Klasse, und als die Wandlung der timeclass in das richtige format (8-12-2010 -> format("%B-%y") -> 'december-10'
), und dann transformieren, dass Zeit-Klasse in einem Faktor mit Werten für jeden Monat?
Für beide Ziele, die ich brauchen, um zu konvertieren der dateframe in gewisser Weise eine Zeit-Klasse, und das ist, wo ich lief in einige Schwierigkeiten.
Mein dataframe sieht wie folgt aus:
> tradesList[c(1,10,11,20),14:15] -> tmpTimes4
> tmpTimes4
EntryTime ExitTime
1 01-03-07 10-04-07
10 29-10-07 02-11-07
11 13-04-07 14-05-07
20 18-12-07 20-02-08
Hier ist eine Zusammenfassung von dem, was ich versucht habe:
> class(tmpTimes4)
[1] "data.frame"
> as.Date(head(tmpTimes4$EntryTimes, n=1), format="%d-%m-%y")
Error in as.Date.default(head(tmpTimes4$EntryTimes, n = 1), format = "%d-%m-%y") :
do not know how to convert 'head(tmpTimes4$EntryTimes, n = 1)' to class "Date"
> as.timeDate(tmpTimes4, format="%d-%m-%y")
Error in as.timeDate(tmpTimes4, format = "%d-%m-%y") :
unused argument(s) (format = "%d-%m-%y")
> timeSeries(tmpTimes4, format="%d-%m-%y")
Error in midnightStandard2(charvec, format) :
'charvec' has non-NA entries of different number of characters
> tmpEntryTimes4 <- timeSeries(tmpTimes4$EntryTime, format="%d-%m-%y")
> tmpExitTimes4 <- timeSeries(tmpTimes4$ExitTime, format="%d-%m-%y")
> tmpTimes5 <- cbind(tmpEntryTimes4,tmpExitTimes4)
> colnames(tmpTimes5) <- c("Entry","Exit")
> tmpTimes5
Entry Exit
[1,] 01-03-07 10-04-07
[2,] 29-10-07 02-11-07
[3,] 13-04-07 14-05-07
[4,] 18-12-07 20-02-08
> class(tmpTimes5)
[1] "timeSeries"
attr(,"package")
[1] "timeSeries"
> as.timeDate(tmpTimes5, format="%d-%m-%y")
Error in as.timeDate(tmpTimes5, format = "%d-%m-%y") :
unused argument(s) (format = "%d-%m-%y")
> as.Date(tmpTimes5, format="%d-%m-%y")
Error in as.Date.default(tmpTimes5, format = "%d-%m-%y") :
do not know how to convert 'tmpTimes5' to class "Date"
> format.POSIXlt(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in format.POSIXlt(tmpTimes5, format = "%d-%m-%y", usetz = FALSE) :
wrong class
> as.POSIXlt(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in as.POSIXlt.default(tmpTimes5, format = "%d-%m-%y", usetz = FALSE) :
do not know how to convert 'tmpTimes5' to class "POSIXlt"
> as.POSIXct(tmpTimes5, format="%d-%m-%y", usetz=FALSE)
Error in as.POSIXlt.default(x, tz, ...) :
do not know how to convert 'x' to class "POSIXlt"
Das TimeDate-Pakete hat eine Funktion für "Bereich", aber das konvertieren in Date-Klasse arbeitet für eine einzelne Instanz, aber aus irgendeinem Grund nicht für ein Daten-frame:
> as.Date(tmpTimes4[1,1], format="%d-%m-%y")
[1] "2007-03-01"
> as.Date(tmpTimes4, format="%d-%m-%y")
Error in as.Date.default(tmpTimes4, format = "%d-%m-%y") :
do not know how to convert 'tmpTimes4' to class "Date"
Ich an dieser Stelle fast glauben, es unmöglich zu machen, also irgendwelche Gedanken würde sehr geschätzt!
Grüße,
InformationsquelleAutor der Frage JosKodify | 2010-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beginnen mit einigen dummy-Daten:
also wir haben so etwas wie dieses:
Mithilfe der oben genannten, schauen Ziel 1berechnen Differenz zwischen den frühesten und den spätesten Termin. Sie können die Behandlung der Daten, als wären Sie Nummern (das ist, wie Sie intern sowieso), so dass Funktionen wie
min()
undmax()
arbeiten. Sie können diedifftime()
Funktion:oder verwenden Sie ein standard-Subtraktion
bekommen die Differenz in Tagen.
head()
undtail()
wird nur funktionieren, wenn Sie die Art der Daten, da diese den ersten und den letzten Wert in einem Vektor, nicht dem höchsten und dem niedrigsten tatsächlichen Wert.Ziel 2: Sie scheinen zu versuchen, zu konvertieren einen Daten-frame zu einem Zeitpunkt. Sie kann das nicht tun. Was Sie tun können, ist, formatieren Sie die Daten in die Komponenten der Daten-frame. Hier habe ich Spalten hinzufügen
tmpTimes
durch Neuformatierung derEntryTime
Spalte in mehrere verschiedene Zusammenfassungen des Datums.Geben:
Wenn Sie amerikanische oder wollen, verwenden Sie die Konvention für den start in die Woche (
%W
beginnt die Woche am Montag, in der US-Konvention ist der start an einem Sonntag), ändern Sie die%W
zu%U
.?strftime
hat mehr details, was%W
und%U
stellen.Einen letzten Punkt, auf den Daten-format: In der oben arbeite ich mit Daten in den standard-R-format. Sie haben Ihre Daten in einem Daten-frame in einer nicht-standard-markup, vermutlich als Zeichen oder Faktoren. Sie haben also so etwas wie:
Müssen Sie konvertieren die Zeichen oder Faktoren, die etwas R versteht, als ein Datum. Meine Präferenz wäre die
"Date"
Klasse. Bevor Sie versuchen, die oben genannten Antworten mit Ihren Daten, konvertieren Sie Ihre Daten in das richtige format:so, dass Ihre Daten sieht wie folgt aus:
InformationsquelleAutor der Antwort Gavin Simpson
Kurze Antwort:
Dann verwenden Sie min-und max-auf der Liste
Termine.
InformationsquelleAutor der Antwort tucson