2016-07-15 11 views
-1

ich einen Datenrahmen müssen yearmon, die wie folgt aussiehteinen Faktor Zeitvariable Converting Variable

head(elnino) 
YEAR..MONTH   NINO.3  NINO.3.4 rainfall 
1 1950 Jan  -1.28   -1.34  5.8 
2 1950 Feb  -1.10   -1.25  17.8 
3 1950 Mar  -0.92   -1.16  22.4 
4 1950 Apr  -0.75   -1.01  8.0 
5 1950 May  -0.47   -0.75  44.0 
6 1950 Jun  -0.49   -0.74 146.8 

Nun ist die erste Spalte dh ist YEAR..MONTH der Klasse FACTOR. Ich möchte es in Klasse Jahrmon konvertieren. Aber ich bin immer die NA, wie unten gezeigt,

as.yearmon(elnino[,1], "%Y-%m") 
NA 

Außerdem ggplot nicht yearmon Klasse unterstützt beim Plotten.

Kann mir bitte jemand bitte sagen, wie man mit Datum dieses Typs umgeht?

Die Daten werden wie folgt

dput(head(elnino)) 
structure(list(YEAR..MONTH = c("1950 Jan", "1950 Feb", "1950 Mar", 
"1950 Apr", "1950 May", "1950 Jun"), NINO.3.ANOM = c(-1.28, 
-1.1, -0.92, -0.75, -0.47, -0.49), NINO.3.4.ANOM = c(-1.34, -1.25, 
-1.16, -1.01, -0.75, -0.74), rainfall = c(5.8, 17.8, 22.4, 8, 
44, 146.8)), .Names = c("YEAR..MONTH", "NINO.3.ANOM", "NINO.3.4.ANOM", 
"rainfall"), row.names = c(NA, 6L), class = "data.frame") 

Darüber hinaus ist die Störung, die ich erhalten, während yearmon Klassenobjekte Plotten mit ggplot wird wie folgt,

qplot(YEAR..MONTH,rainfall,data = elnino,geom="line") 
Don't know how to automatically pick scale for object of type yearmon. Defaulting to continuous 
Error: Discrete value supplied to continuous scale 
+0

Bitte fügen Sie die Ausgabe von 'dput (Kopf (elnino))' in Frage anstelle der Datenprobe Sie zur Verfügung gestellt, damit wir eine Stichprobe Ihrer Daten mit der gleichen Struktur wie Ihre tatsächlichen Daten haben. Bitte zeigen Sie auch den Code an, der für Ihr Problem relevant ist (einschließlich des ggplot-Codes) und alle Fehlermeldungen, die Sie erhalten. – eipi10

+1

Die unmittelbare Antwort ist, dass das Format, das Sie an 'as.yearmon' übergeben, nicht mit dem übereinstimmt, was im data.frame gefunden wird. Ohne die eigentlichen Daten ist es jedoch schwierig, mehr zu tun, als dies zu sagen. Ohne zu wissen, was Sie versuchen zu entwerfen, kann ich keine sinnvolle Problemumgehung vorschlagen. –

+1

probe 'as.yearmon (elnino [, 1],"% Y% b ")'% b bezieht sich auf einen abgekürzten Monat und Ihre Spalte sieht im Format Jahr, drei Leerzeichen, abgekürzter Monat aus. Dieses Bit in Anführungszeichen bezieht sich auf das Format, in dem sich die konvertierten Daten befinden, und nicht so, wie es nach der Umwandlung aussehen soll. – Austin

Antwort

2

Wie vorhergesagt, das Format tat as.yearmon nicht im Lieferumfang enthalten passen Sie Ihre Daten an. Es hat drei Leerzeichen zwischen Jahr und Monat, die als Abkürzung angegeben ist, nicht die Zahl. Dies sollte funktionieren:

as.yearmon(as.character(elnino[,1]), "%Y %b") 

Für das Plotten, gibt es einen Grund, warum Sie haben yearmon zu benutzen? Warum können Sie nicht häufiger ein Date Format verwenden oder die Werte weiterhin als Faktoren behandeln (abhängig von Ihren Anforderungen).

+0

Zum Plotten können Sie 'scale_x_yearmon' verwenden. –

3

Eine einfache Alternative ist nur die Date-Klasse auf den ersten Tag des Monats statt Zoo :: yearmon Set zu verwenden:

elnino$month <- as.Date(paste(elnino$YEAR..MONTH, '01'), '%Y %b %d') 

qplot(month, rainfall, data = elnino, geom = "line") 

plot with mon labels

Die Linie die gleiche sein wird, und ggplot weiß wie man die Achse schön ohne mehr Arbeit formatiert. Wenn Sie auf das Jahr hinzufügen möchten, benutzen Sie scale_x_date:

qplot(month,rainfall,data = elnino,geom="line") + scale_x_date(date_labels = '%b %Y') 

plot with yearmon labels