2017-12-12 2 views
0

Ich versuche, die Daten zu konvertieren, die ich in txt-Datei:Ersetzen durch Semikolon getrennte Werte Tab

4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512;... 

auf eine Säule (Tabelle), wobei die Werte von Tab getrennt sind.

4.0945725440979 
4.07999897003174 
4.0686674118042... 

Bisher habe ich versucht,

mydata <- read.table("1.txt", header = FALSE) 
separate_data<- strsplit(as.character(mydata), ";") 

Aber es funktioniert nicht. separate_data in diesem Fall bestehen nur aus 1-Elemente:

[[1]] 
[1] "1" 
+1

Haben Sie 'sep ="; "' in 'read.table' verwendet? – akrun

+0

Überprüfen Sie die Dokumentation von' read.csv' indem Sie '? Read.csv' eingeben. Dort findest du was @akrun erwähnt. (oder '? read.table', natürlich) –

+1

Es sieht so aus, als hätten Sie es hier nicht mit rechteckigen Daten zu tun. Daher empfehle ich 'scan (file =" path/to/myfile.txt ", sep ="; ")' '. Verwenden Sie anschließend "data.frame", um das Ergebnis in die Spalte data.frame zu stellen. –

Antwort

0

am OP Basierend, es ist nicht direkt angegeben, ob die Rohdaten-Datei mehr Beobachtungen einer einzelnen Variablen enthält, oder sollte in n-Tupel gebrochen werden. Da das OP angibt, dass read.table in einer einzelnen Zeile zu dem Ergebnis führt, dass es mehrere Zeilen enthält, können wir daraus schließen, dass die korrekte Technik scan() und nicht read.table() ist.

Wenn die Daten in der Rohdatendatei eine einzelne Variable darstellen, funktioniert die in Kommentaren von @docendo veröffentlichte Lösung ohne zusätzlichen Aufwand. Ansonsten sind zusätzliche Arbeiten erforderlich, um die Daten zu säubern.

Hier ist ein Ansatz mit scan(), die liest die Datei in einen Vektor, und bricht es in Beobachtungen mit 5 Variablen.

rawData <- "4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512;4.0945725440979;4.07999897003174;4.0686674118042;4.05960083007813;4.05218315124512" 

value <- scan(textConnection(rawData),sep=";") 
columns <- 5 # set desired # of columns 
observations <- length(aVector)/columns 
observation <- unlist(lapply(1:observations,function(x) rep(x,times=columns))) 
variable <- rep(1:columns,times=observations) 

data.frame(observation,variable,value) 

... und die Ausgabe:

> data.frame(observation,variable,value) 
    observation variable value 
1   1  1 4.094573 
2   1  2 4.079999 
3   1  3 4.068667 
4   1  4 4.059601 
5   1  5 4.052183 
6   2  1 4.094573 
7   2  2 4.079999 
8   2  3 4.068667 
9   2  4 4.059601 
10   2  5 4.052183 
> 

die Daten an dieser Stelle in einem breiten Format ordentlich Daten mit reshape2::dcast() gesetzt umgewandelt werden können.

Beachten Sie, dass diese Lösung erfordert, dass die Anzahl der Datenwerte in der Rohdatendatei durch die Anzahl der Variablen gleichmäßig teilbar ist.

Verwandte Themen