2016-07-15 9 views
0

Ich habe versucht, eine Funktion zu erstellen, die Semikolon-enthaltende Elemente in einer Datenrahmenspalte durch geteilte Einträge ersetzt, die sich am unteren Ende der Spalte befinden, wobei Basis-R verwendet wird Verwenden Sie diese Funktion mit apply und nehmen Sie die Addition vor, wenn Sie einen Eintrag mit Semikolon erkennen.Geteilte Datenrahmenelemente mit Semikolon in R

Das Hauptproblem mit meinem Code ist, dass es genau den gleichen Datenrahmen ohne zusätzliche Werte zurückgibt.

> df 
rs2480711 
rs74832092 
rs4648658 
rs4648659 
rs61763535 
rs28733941;rs67677371 

>x 
"rs28733941;rs67677371" 

function(x){ 
semiCols = length(unlist(strsplit(x, ";"))) 
elementsRs = unlist(strsplit(x, ";")) 
if(semiCols>1){ 
for(i in 1:semiCols){ 
df = rbind(df, elementsRs[i]) 
}}} 

Ich würde auch gerne wissen, wie kann ich den Code erweitern, um Reihen zu spalten, basierend auf einem Wert alle anderen unverändert bleiben. Zum Beispiel diese

>df 
0 rs61763535    T1 
1 rs28733941;rs67677371 T2 

aussehen wird dieses

>df2 
0 rs61763535    T1 
1 rs28733941    T2 
1 rs67677371    T2 
+0

Was ist Ihre erwartete Ausgabe und was ist "x"? – akrun

+0

@Sotos. Versuchte es, aber aus irgendeinem Grund löscht es alle Einträge mit leeren Werten, etwas, das ich wirklich nicht wünsche. – civy

+0

'splatstapshape :: cSplit (df, 'V2', ';', 'lang')' funktioniert für mich – Sotos

Antwort

1

Wenn ich richtig verstanden habe, diese wieder

unlist(strsplit(as.character(df$V1),split = ";")) 

arbeiten, ich dich nicht richtig bekommen konnte. Aber vielleicht suchen Sie nach diesem

apply(df,2,function(t) unlist(strsplit(as.character(t),split = ";"))) 
+0

Danke, habe meinen Tag gerettet! Weißt du, wie kann ich das unter der Annahme, dass ich mehrere Spalten habe, erweitern? Ich möchte alle anderen Werte gleich behalten, aber n neue Zeilen erstellen, wobei n die Anzahl der Semikolons ist. – civy

+0

Ich bekomme Fehler "Dim (X) muss eine positive Länge haben", wenn ich es auf einen mehrspaltigen Datenrahmen anwenden. Ich möchte nur eine Spalte aufteilen und die Werte der restlichen Spalten kopieren, um identische Zeilen ohne Semikolon-Einträge zu erhalten. – civy

+0

Ich habe meine ursprüngliche Post bearbeitet, Entschuldigung für die Unannehmlichkeiten, – civy