2017-03-16 6 views
0

Kontext, ich suche einen großen Zeitreihendatenrahmen zu einem langen Datenrahmen zu schmelzen. Auf diese Weise kann ich die Daten in ggplot2 plotten und ein gestapeltes Flächendiagramm erstellen. Die Zeitreihe ist nicht regulär (fehlen einige Wochenenden und Feiertage)Wie konvertiert man einen breiten Zeitreihendatenrahmen in einen langen Datenrahmen?

Die aktuelle Datenrahmen sieht aus wie

df 
    date  item_1 item_2  item_3 ... 
1 1992-03-23  8.63  7.609  1.6546 ... 
2 1992-03-24  7.98  7.634  1.6533 ... 
... 

Wie kann ich die oben Datenrahmen konvertieren Sie in

date  variable value 
1 1992-03-23 item_1  8.63 
2 1992-03-23 item_2  7.609 
3 1992-03-23 item_3  1.6546 
2 1992-03-24 item_1  7.98 

den folgenden Code verwenden Ich bekomme den Fehler

> melted_df = melt(df) 
Using as id variables 
Error in as.Date.numer(value): 'origin' must be supplied 
+1

Mögliches Duplikat von [Umgestaltung data.frame von breit zu lang Format] (http://stackoverflow.com/questions/2185252/reshaping-data-frame-from-wide-to-long-format) –

Antwort

1

müssen Sie dieangeben 10 als zweites Argument in der Schmelze Funktion und es funktioniert:

require(reshape) 
df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")), 
       item_1 = c(8.63, 7.98), 
       item_2 = c(7.609, 7.634), 
       item_3 = c(1.6546, 1.6533)) 

melt(df, "date") 

Sie erhalten:

 date variable value 
1 1992-03-23 item_1 8.6300 
2 1992-03-24 item_1 7.9800 
3 1992-03-23 item_2 7.6090 
4 1992-03-24 item_2 7.6340 
5 1992-03-23 item_3 1.6546 
6 1992-03-24 item_3 1.6533 

hoffe, das hilft

+0

Dies funktioniert. Ich musste "Datum" in der Formel angeben. – LascieL

+0

Wie gebe ich eine Teilmenge an? z.B. new_data_frame (wo: variable == item_1 oder variable == item_2) – LascieL

+0

ich würde dies mit 'require (dplyr)' machen und dann einfach: 'df_new <- schmelzen (df," date ")%>% filter (variable == "item_1" | variable == "item_2") ' – Codutie

0

Oder mit gather

library(tidyverse) 

df <- data.frame(date = as.Date(c("1992-03-23", "1992-03-24")), 
       item_1 = c(8.63, 7.98), 
       item_2 = c(7.609, 7.634), 
       item_3 = c(1.6546, 1.6533)) 

df %>% gather(variable, value, -date) 

gibt,

 date variable value 
1 1992-03-23 item_1 8.6300 
2 1992-03-24 item_1 7.9800 
3 1992-03-23 item_2 7.6090 
4 1992-03-24 item_2 7.6340 
5 1992-03-23 item_3 1.6546 
6 1992-03-24 item_3 1.6533 
Verwandte Themen