2016-06-21 15 views
0

Ich habe einen Datensatz mit zwei Sätze von Beobachtungen für 830 und 930. Mein Ziel ist, meinen Datenrahmen so zu gestalten, dass es eine originID Spalte, eine 830 Spalte und eine 930 Spalte gibt die Werte unter walking in ihrer jeweiligen Stundenspalte. Es ist im Grunde eine umgekehrte Umformung. Gibt es eine schnelle Methode, dies in R zu tun, und welches Paket wäre am besten geeignet?Umformung eines Datenrahmens durch umgekehrte Schmelze

> df 
     originId walking hour 
1 359727104 3.440248 830 
2 359931904 8.065233 830 
3 229873828 3.519326 830 
4 359931908 20.758961 830 
5 359931909 15.050358 830 
6 359727113 3.178191 830 
1063 359727104 3.029167 930 
1064 359931904 8.093116 930 
1065 229873828 3.523732 930 
1066 359931908 21.234964 930 
1067 359931909 15.701993 930 
1068 359727113 2.768297 930 

Ich habe diese Formel aus reshape2 versucht, aber es das richtige Ergebnis nicht produzieren wird.

> dcast(df, formula = originId + walking ~ hour) 
Using hour as value column: use value.var to override. 
    originId walking 830 930 
1 229873828 3.519326 830 NA 
2 229873828 3.523732 NA 930 
3 359727104 3.029167 NA 930 
4 359727104 3.440248 830 NA 
5 359727113 2.768297 NA 930 
6 359727113 3.178191 830 NA 
7 359931904 8.065233 830 NA 
8 359931904 8.093116 NA 930 
9 359931908 20.758961 830 NA 
10 359931908 21.234964 NA 930 
11 359931909 15.050358 830 NA 
12 359931909 15.701993 NA 930 

Hier ist eine Probe der Daten:

> dput(df) 
structure(list(originId = c(359727104, 359931904, 229873828, 
359931908, 359931909, 359727113, 359727104, 359931904, 229873828, 
359931908, 359931909, 359727113), walking = c(3.44024822695035, 
8.06523297491039, 3.51932624113475, 20.7589605734767, 15.0503584229391, 
3.1781914893617, 3.02916666666667, 8.09311594202899, 3.52373188405797, 
21.2349637681159, 15.7019927536232, 2.76829710144928), hour = c(830L, 
830L, 830L, 830L, 830L, 830L, 930L, 930L, 930L, 930L, 930L, 930L 
)), .Names = c("originId", "walking", "hour"), row.names = c(1L, 
2L, 3L, 4L, 5L, 6L, 1063L, 1064L, 1065L, 1066L, 1067L, 1068L), class = "data.frame") 
+0

Sie müssen die 'walking'Variable als Ihre' value.var' verwenden: 'dcast (df, formula = originId ~ hour, value.var = 'walking')' – Jaap

Antwort

0

Sie benötigen die walking -variable als verwenden value.var:

dcast(df, originId ~ hour, value.var = 'walking') 

die gibt:

originId  830  930 
1 229873828 3.519326 3.523732 
2 359727104 3.440248 3.029167 
3 359727113 3.178191 2.768297 
4 359931904 8.065233 8.093116 
5 359931908 20.758961 21.234964 
6 359931909 15.050358 15.701993 

Und wahrscheinlich noch besser:

dcast(df, originId ~ paste0('hr_',hour), value.var = 'walking') 

die gibt:

originId hr_830 hr_930 
1 229873828 3.519326 3.523732 
2 359727104 3.440248 3.029167 
3 359727113 3.178191 2.768297 
4 359931904 8.065233 8.093116 
5 359931908 20.758961 21.234964 
6 359931909 15.050358 15.701993 
0

Versuchen tidyr:

df %>% spread(hour, walking) 

ich so mit dplyr so müssen die Angaben ändern würde Ihnen empfehlen, nicht zu tun mit Spaltennamen beginnend mit Zahlen:

df %>% 
    mutate(hour = paste0('hour_', hour)) %>% 
    spread(hour, walking) 
+0

Ich bekomme den folgenden Fehler, wenn ich Folgendes versuche: Fehler in utils :: getS3method ("as_data_frame", "matrix", envir = asNamespace ("tibble")): unbenutztes Argument (envir = asNamespace ("tibble")) - –

+0

Versuchen Sie, Ihre R-Sitzung neu zu starten und nur die benötigten Pakete zu laden. Wenn es funktioniert, dann gibt es einen Konflikt. –