2016-04-01 4 views
1

Ich versuche eine Spalte zu teilen. Mein Datenrahmen (menuD) ist wieWarnung: Anzahl der Spalten des Ergebnisses ist kein Vielfaches der Vektorlänge (arg 1)

Column1 
1|3|4|5 
4|5|6|7 

Ich wollte die Zahlen in Spalte1 teilen, also tat ich dies.

menuD <- data.frame (do.call('rbind', strsplit(as.character(myCmenu$myFile.menudata), '|', fixed = TRUE))) 

Ich habe das erwartete Ergebnis, das wie dieses ist

col1 | col2 | col3 | col4 
    1 | 3 | 4 | 5 
    4 | 5 | 6 | 7 

Aber ich habe diese Warnmeldung von R

> Warning message: 
In rbind(c("", "164200", "", "167", "108", "112", "116", "120"), : 
    number of columns of result is not a multiple of vector length (arg 1) 

Ich mag gerne wissen, hat diesen Effekt meine Daten ? Sind alle Daten richtig getrennt?

+0

Das Beispiel, das du gibst, arbeitet für mich? –

+1

Die Anzahl der Elemente im ursprünglichen Dataset ist möglicherweise nicht für jede Zeile identisch. – akrun

Antwort

5

Basierend auf dem Beispiel vorgesehen, entweder cSplit

library(splitstackshape) 
cSplit(menuD, "Column1", "|") 
# Column1_1 Column1_2 Column1_3 Column1_4 
#1:   1   3   4   5 
#2:   4   5   6   7 

Or separate von tidyr

library(tidyr) 
separate(menuD, Column1, into = paste0("col", 1:4)) 

Or read.table/read.csv verwendet werden.

read.table(text=menuD$Column1, sep="|", fill=TRUE, header=FALSE) 

Aber die Warnung in der Zeit nach der OP zeigt an, dass es möglicherweise Elemente in dem „Column1“ mit einem geringeren Anzahl von | sein. In diesem Fall sollte die cSplit oder die letzte Option funktionieren.

+0

Danke für die Bearbeitung akrun. Ich versuche jetzt die erste Option. für die letzte Option, wird es den Datentyp meines data.frame ändern? –

+0

@RayanSp Wenn Sie eine Faktorspalte verwenden, verwenden Sie 'read.table (text = as.character (menuD $ Column1), sep =" | ", fill = TRUE, header = FALSE, stringsAsFactors = FALSE)' kann verwendet werden. Im 'cSplit' gibt es eine Option, um die Klasse standardmäßig zu konvertieren. – akrun

+0

read.table ist absolut langsam, es läuft immer noch (die vorherige Methode, die ich versuchte, dauerte Sekunden) ist das normal? –

Verwandte Themen