2016-09-26 1 views
-1

ich einen Datenrahmen wie diese haben:mache ich etwas ähnlich einem R Datenrahmen zu schmelzen

Die erste Spalte ist numerisch, und die zweite Spalte Liste ein Komma getrennt (Zeichen)

id numbers 
1 2,4,5 
2 1,4,6 
3 NA 
4 NA 
5 5,1,2 

Und ich möchte im Wesentlichen den Datenrahmen ähnlich dem Umformpaket "schmelzen". So dass der Ausgang ein Datenrahmen, der muss sein, die jeweils ähnliche jede Zahl in einer Spalte

id numbers 
1 2 
1 4 
1 5 
2 1 
2 4 
2 6 
3 NA 
4 NA 
5 5 
5 1 
5 2 

Außer im reshape2 Paket sieht ..., die zu viel Speicherplatz in Anspruch nimmt, wenn es viele Zahlen sind .. Deshalb habe ich mich entschieden, die Liste der Zahlen als eine durch Komma getrennte Liste zu setzen. Aber mit diesem Setup funktioniert die Schmelze nicht mehr.

Können Sie die effizienteste Methode für die Transformation vom Eingabedatenfeld zum Ausgabedatenfeld vorschlagen?

+1

Überprüfen Sie einige dieser Fragen und Antworten: http://stackoverflow.com/search?q=%5Br%5D+cSplit+long –

+0

Eine Frage wie [diese] (http://stackoverflow.com/questions/30207500/csplit "librarysplitstackshape-is-always-drop-the-column" gibt Ihnen nützliche Informationen. – jazzurro

Antwort

-2

Die Art, wie ich es für jede Zeile tun würde, erstellen Sie einen data.frame und speichern Sie sie in einer Liste, wo df ist Ihre erste data.frame.

l = list() 
for (j in 1:nrow(df)){ 
    l[[j]] = data.frame(id  = df$id[[j]], 
         numbers = split(df$numbers[[j]], ',')) 
} 

Danach können Sie alle Listenelemente in einem einzigen data.frame mit plyr stapeln :: ldply mit dem ‚data.frame‘ Option.

Verwandte Themen