2017-10-31 16 views
-2

Ich habe einen Datenrahmen mit 131 Millionen Zeilen.Spalte mit Listenwerte zu Zeilen

Die data.frame hat 2 Spalten. Column 1 ist eine Nummer. Column 2 ist eine Liste von Werten

So etwas wie diese

Col1 | Col2 
1 | a, b, c 
2 | d, e, f 
3 | a, e, f 

Und ich brauche es so ausgedrückt:

Col1 | Col2 
1 | a 
1 | b 
1 | c 
2 | d 
2 | e 
2 | f 
3 | a 
3 | e 
3 | f 

Es muss wegen der 131 Millionen Zeilen schnell sein.

+0

Ich würde vorschlagen, jede Zeile zu lesen, zu analysieren und einzufügen, Sie können auch eine Speicherprozedur mit einem Cursor verwenden, aber es gibt keinen schnellen Weg, dies zu erreichen. –

+0

Können Sie echte Daten geben und erklären, was Sie versucht haben? – Arthur

+0

Bitte, bearbeiten Sie Ihre Frage und fügen Sie die Ausgabe von 'dput (your_data_frame)' hinzu. Dies zeigt die Datenstruktur und hilft anderen, Ihre Frage zu beantworten. Vielen Dank. – Uwe

Antwort

0

Durch die Verwendung von unnest wenn Col2 String

library(tidyr) 
library(dplyr) 
dt %>% 
    mutate(Col2 = strsplit(Col2,",")) %>% 
    unnest(Col2) 
# A tibble: 9 x 2 
    Col1 Col2 
    <dbl> <chr> 
1  1  a 
2  1  b 
3  1  c 
4  2  d 
5  2  e 
6  2  f 
7  3  a 
8  3  e 
9  3  f 

Dateneingabe:

dt=data_frame(Col1 = c(1,2,3),Col2 = c('a, b, c','d, e, f','a, e, f')) 

Wie Sie erwähnen es ist eine Aufzählung der Wert, so brauchen Sie nur auf

dt %>% unnest(Col2) 
# A tibble: 9 x 2 
    Col1 Col2 
    <dbl> <chr> 
1  1  a 
2  1  b 
3  1  c 
4  2  d 
5  2  e 
6  2  f 
7  3  a 
8  3  e 
9  3  f 

Dateneingabe

dt 
# A tibble: 3 x 2 
    Col1  Col2 
    <dbl> <list> 
1  1 <chr [3]> 
2  2 <chr [3]> 
3  3 <chr [3]> 
+0

auf der Suche nach dem Grund Grund :-) – Wen