2017-03-01 7 views
1

Erstes Posting, hauptsächlich weil ich es leid war, meinen Kopf gegen die Wand zu schlagen.Erstellen einer ID zum Umformen eines Datensatzes

Vielen Dank im Voraus für das Betrachten.

Ich habe einen Datenrahmen, der wie folgt aussieht:

state city x y z 
1 OR Portland 8 10 1 
2 OR Portland 8 10 4 
3 OR Portland 8 10 10 
4 NY New York 29 15 10 
5 NY New York 29 15 18 
6 NJ Trenton 8 10 50 
7 NJ Trenton 8 10 60 
8 NJ Trenton 8 10 70 
9 WA Seattle 1 70 6 
10 WA Seattle 1 70 7 
11 WA Seattle 1 70 8 
12 WA Seattle 1 70 9 
13 WA Seattle 1 70 10 
14 WA Seattle 1 70 11 

Ich habe versucht, es neu zu gestalten wie folgt aussehen:

state city x y z.1 z.2 z.3 z.4 z.5 z.6 
OR Portland 8 10 1 4 10 
NY New York 29 15 10 18 
NJ Trenton 8 10 50 60 70 
WA Seattle 1 70 6 7 8 9 10 11 

Ich habe das Paket reshape2 und den Code mit sieht so aus:

df <- melt(data,id.vars = c("state","city","x","y"),measure.vars = "z") 
wide <- dcast(df, state + city + x + y ~ variable) 

Gibt die Anzahl der Variablen z für jeden Satz von ID.Vars zurück.

Ich habe auch versucht dies:

wide <- dcast(df, state + city + x + y ~ value) 

die wie folgt aussieht:

state city x y 1 4 6 7 etc... 
OR Portland 8 10 1 1 0 0 
NY New York 29 15 0 0 0 0 
NJ Trenton 8 10 0 0 0 0 
WA Seattle 1 70 0 0 1 1 

Dies ist näher an, was für würde ich suche, aber sehr schwierig sein, Informationen zu verwenden, zum Nachschlagen.

Sagen Sie mir, wenn ich falsch liege, aber es sieht so aus, als ob ich eine ID-Variable für jeden doppelten Wert von Staat, Stadt, x, y brauche.

Ich war nicht in der Lage, sich Gedanken zu machen oder etwas zu finden, was mir erlaubt, Spalten zu erstellen, die doppelte Werte wie unten haben.

state city x y z num 
1 OR Portland 8 10 1 1 
2 OR Portland 8 10 4 2 
3 OR Portland 8 10 10 3 
4 NY New York 29 15 10 1 
5 NY New York 29 15 18 2 
6 NJ Trenton 8 10 50 1 
7 NJ Trenton 8 10 60 2 
8 NJ Trenton 8 10 70 3 
9 WA Seattle 1 70 6 1 
10 WA Seattle 1 70 7 2 
11 WA Seattle 1 70 8 3 
12 WA Seattle 1 70 9 4 
13 WA Seattle 1 70 10 5 
14 WA Seattle 1 70 11 6 

Ich würde jede Hilfe oder eine Idee, wo auf der Suche nach Lösungen zu suchen.

Best,

-n

+0

Hmm verloren bin ich etwas fehlt - ich glaube nicht, dass das wirklich ein Duplikat ist. Die verknüpfte Frage sucht nach dem Erstellen sequenzieller i.ds, während diese nach einer Liste existierender IDs nach Bundesland und Stadt fragt. Mit 'library (data.table)' können wir 'dt [,. (Z = list (z)), mit =. (State, city, x, y)]' hier verwenden – dww

+0

@ dww - es ist im Wesentlichen das Gleiche Ausgabe - 'dat $ Zeit <- ave (rownames (dat), dat [c (" Zustand "," Stadt "," x "," y ")], FUN = seq_along); reshape (dat, idvar = c ("state", "stadt", "x", "y"), direction = "wide") 'braucht zum Beispiel nur eine sequentielle ID, die erstellt werden soll. – thelatemail

+0

Danke für die Hilfe! Ich sollte es zusammenfügen können. – nhol

Antwort

1

Wenn dplyr verwendet, ist eine Option, die Sie verwenden können:

library(dplyr) 
df %>% 
    group_by(state,city, x, y) %>% 
    mutate(n = row_number()) %>% 
    spread(n, z, sep = '') 

Beachten Sie, dass die Bestellung tho

Verwandte Themen