2017-04-24 4 views
0

Ich muss die Daten im Datenrahmen sammeln und transponieren, stündliche Werte sollten in einer Spalte sein. Die erste Spalte sollte Datum mit Stunde und Sekunde transponierten Stundenwerten sein.teilen, transponieren und sammeln Datenrahmen

Beispieldaten:

structure(list(Year = c(2016L, 2016L), JDay = 1:2, Hour_1 = c(2.59, 
5.95), Hour_2 = c(2.19, 5.84), Hour_3 = c(1.84, 5.75), Hour_4 = c(1.51, 
5.66), Hour_5 = c(1.21, 5.58), Hour_6 = c(0.94, 5.5), Hour_7 = c(0.69, 
5.43), Hour_8 = c(0.45, 5.37), Hour_9 = c(0.23, 5.31), Hour_10 = c(2.18, 
6.19), Hour_11 = c(4.39, 7.16), Hour_12 = c(6.29, 8), Hour_13 = c(7.76, 
8.65), Hour_14 = c(8.68, 9.06), Hour_15 = c(9, 9.2), Hour_16 = c(8.68, 
9.06), Hour_17 = c(7.76, 8.65), Hour_18 = c(7.8, 8.52), Hour_19 = c(7.21, 
7.57), Hour_20 = c(6.85, 6.99), Hour_21 = c(6.59, 6.57), Hour_22 = c(6.39, 
6.25), Hour_23 = c(6.22, 5.98), Hour_24 = c(6.08, 5.75)), .Names = c("Year", 
"JDay", "Hour_1", "Hour_2", "Hour_3", "Hour_4", "Hour_5", "Hour_6", 
"Hour_7", "Hour_8", "Hour_9", "Hour_10", "Hour_11", "Hour_12", 
"Hour_13", "Hour_14", "Hour_15", "Hour_16", "Hour_17", "Hour_18", 
"Hour_19", "Hour_20", "Hour_21", "Hour_22", "Hour_23", "Hour_24" 
), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame" 

Die Nutzung sammeln nur wird mir alle Hour_1 Werte in, um zu geben ...

gather(OP_daily[, c(5:28)], time,temp, Hour_1:Hour_24) 

Beispiel Ausgabe:

date   temp  
2016-1-1 1:00 2.59 
2016-1-1 2:00 2.19 

Antwort

2

Dieser Sound wie die gather suchen Sie:

df %>% 
    gather(-c(Year,JDay), key = "Hour", value = "temp") %>% 
    unite(date,Year,JDay,Hour) %>% 
    mutate(date=as.POSIXct(date,format='%Y_%j_Hour_%H')) %>% 
    arrange(date) 

        date  temp 
       <time> <dbl> 
1 2016-01-01 01:00:00 2.592221 
2 2016-01-01 02:00:00 2.193009 
3 2016-01-01 03:00:00 1.835225 
4 2016-01-01 04:00:00 1.511071 
5 2016-01-01 05:00:00 1.214767 
6 2016-01-01 06:00:00 0.941902 

EDIT

Um zu sehen, wie viele Beobachtungen pro Tag:

res <- df %>% 
    gather(-c(Year,JDay), key = "Hour", value = "temp") %>% 
    unite(date,Year,JDay,Hour) %>% 
    mutate(date=as.POSIXct(date,format='%Y_%j_Hour_%H',tz = "GMT")) %>% 
    arrange(date) 
res%>% 
mutate(date_only=as.Date(date))%>% 
group_by(date_only)%>% 
summarise(count=n()) 

    date_only count 
     <date> <int> 
1 2016-01-01 23 
2 2016-01-02 24 
3 2016-01-03  1 
+0

Danke @P Lapointe, aber ich brauche stündlich in einen Tag jede Zeile transponieren enthält, und so weiter. Stunden ab 1:24 sind der erste Tag und so weiter. –

+0

@m_c Können Sie das gewünschte Ergebnis als Tabelle in Ihrer Frage hinzufügen? –

+0

gerade getan, gesehen, dass es nicht klar genug war. Deine Lösung gibt mir so etwas wie meinen obigen Code, weshalb ich hier eine Frage stelle. –

Verwandte Themen