2017-03-20 2 views
2

Ich habe Ergebnisse in folgendem Format erhalten:spliting Spalt in 2 und ersetzt Charakter durch Nummer - R

 Parameter Wert 
... 
99  se.m 0.1000 
100  se.m 0.1000 
101 se.st 0.5000 
102 se.st 0.500 
... 

ich die Spalte Parameter in zwei Spalten geteilt werden soll: Parameter und Insentität. Die Teilung sollte erfolgen, wo der Punkt . ist. In der resultierenden Spalte Intensität möchte ich dann alle m durch den Wert 2 ersetzen und alle st durch den Wert 3 ersetzen. Das Ergebnis sollte wie folgt aussehen:

Parameter Intensität Wert 
... 
99 se  2 0.4000 
100 se  2 0.0396 
101 se  3 0.2702 
102 se  3 1.1566 
... 

ich es geschafft haben, dieses Format zu erhalten, aber ich bin sicher, dass es eine elegantere Weise zu tun.

Die Art, wie ich die Ergebnisse erhalten habe, ist ungeschickt. Ich hatte ursprünglich 2 Spalten in der Ausgabe: se.m und se.st. Ich habe die Spaltennamen manuell geändert:

colnames(results) <- c("2", "3") 

und dann die beiden Spalten in 1 Spalte kombiniert. Dann fügte ich in jeder Zeile eine Spalte mit den Zeichen se hinzu.

results <- melt(results) 
cbind(Parameter ="se", results) 

Ich weiß, es gibt noch andere Alretnatives. Zum Beispiel mit extract von tidyr, aber ich kann nicht die Ausdruckssyntax richtig bekommen. Auch stringr Paket, könnte ich str_ match Funktion oder vielleicht auch strsplit verwenden. All diese sehen gut aus, aber ich kann sie nicht auf mein Problem anwenden. Ich stecke hier fest. Es gibt ähnliche Fragen, aber ich konnte keine Lösung finden, die für mich funktioniert.

PS: Ich schätze jeden Eingang - Kommentare, Kritik, Tipps. Ich lerne und jeder Ratschlag ist für mich von großem Wert.

+0

Prüfung [Rpubs ] (https://rpubs.com/bradleyboehmke/data_wrangling) für die Datenverarbeitung mit dplyr & tidyr. Ich habe es gefunden, nachdem ich diese Frage gestellt hatte. – Danka

Antwort

2

Wir verwenden separate

library(tidyr) 
library(dplyr) 
separate(df1, Parameter, into = c("Parameter", "Intensitat")) %>% 
       mutate(Intensitat = recode(Intensitat, m = 2, st = 3)) 

# Parameter Intensitat Wert 
#1  se   2 0.1 
#2  se   2 0.1 
#3  se   3 0.5 
#4  se   3 0.5 

Oder wir können mit read.table trennen, indem die sep Angabe, führen Sie eine transform ation und cbind mit dem "Wert" -Spalte

cbind(transform(read.table(text= as.character(df1$Parameter), 
    col.names = c("Parameter", "Intensitat"), sep="."), 
     Intensitat = ifelse(Intensitat=="m", 2, 3)), df1["Wert"]) 
# Parameter Intensitat Wert 
#99   se   2 0.1 
#100  se   2 0.1 
#101  se   3 0.5 
#102  se   3 0.5 
+1

Danke @akrun, das ist genau das, was ich gesucht habe! – Danka

+1

Ich habe gerade über den Pipe-Operator '%>% auf [Rpubs] (https://rpubs.com/bradleyboehmke/data_wrangling) gelesen, was mich zu anderen Funktionen wie' separete' geführt hat. Nur wenn ich es hier fallen lasse, könnte es für andere Studenten mit ähnlichem Problem nützlich sein. – Danka

+0

@Danka Ja, es gibt viele nützliche Funktionen in der ordentlichen Liste von Paketen – akrun

Verwandte Themen