2017-10-09 4 views
0

Ich versuche, eine Datei in R zu lesen, die verschiedene Trennzeichen in der ersten Zeile hat Leerzeichen als Trennzeichen, aber von der zweiten Zeile bis zum letzten zwischen der ersten Spalte und der zweiten gibt es ein Leerzeichen , das gleiche zwischen dem zweiten und dritten, dann sollten alle Blöcke von zwei, Nullen und Einsen unterschiedliche Spalten sein. irgendein Tipp ?!Daten in R mit verschiedenen Trennzeichen lesen

ID Chip AX-77047182 AX-80910836 AX-80737273 AX-77048714 AX-77048779 AX-77050447 
3811582 1 2002202222200202022020200200220200222200022220002200000201202000222022 
3712982 1 2002202222200202022020200200220200222200022220002200000200202000222022 
3712990 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713019 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713025 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713126 1 2002202222200202022020200200220200222200022220002200000200202000222022 
+0

Können Sie bitte ein Beispiel für Ihre erwartete Ausgabe geben? – emilliman5

+0

sicher für die ersten drei Zeilen: erste Reihe: ID Chip AX-77047182 AX-80910836. Und zweite Reihe: 3811582 1 2 0. Die Trennzeichen sollten Leerzeichen sein. – Nico

+0

Bitte bearbeiten Sie Ihren Beitrag, anstatt ihn zu kommentieren – emilliman5

Antwort

0

Sicherlich nicht die eleganteste Lösung, aber man konnte die folgende versuchen. Wenn ich Ihre Beispieldaten richtig verstanden habe, haben Sie nicht alle Spaltennamen (AX-77047182, ...) angegeben, die für die Zeilen von Nullen/Einsen/Zweien benötigt würden. Wenn mein Verständnis falsch ist, führt die unten beschriebene Vorgehensweise nicht zum gewünschten Ergebnis, kann Ihnen aber bei der Suche nach einer Problemumgehung helfen. Sie können das Trennzeichen einfach im zweiten Split-Befehl anpassen. Ich hoffe, das hilft ...

#read file as character vector 
chipstable <- readLines(".../chips.txt") 

#extact first line to be used as column names 
tablehead <- unlist(strsplit(chipstable[1], " ")) 

#split by first delimiter, i.e., space 
chipstable <- strsplit(chipstable[2:length(chipstable)], " ") 

#split by second delimiter, i.e., between each character (here number) 
#and merge the two split results in one line 
chipstable <- lapply(chipstable, function(x) { 

    c(x[1:2], unlist(strsplit(x[3], ""))) 

}) 

#combine all lines to a data frame 
chipstable <- do.call(rbind, chipstable) 

#assign column names 
colnames(chipstable) <- tablehead 

#turn values to numeric (if needed) 
chipstable <- apply(chipstable, 2, as.numeric) 
-1

Sie können versuchen, ... read(pattern = " || 1 ", recursive = TRUE) Nach einer bind

Zum Beispiel machen:

data <- "ID Chip AX-77047182 AX-80910836 AX-80737273 AX-77048714 AX-77048779 AX-77050447 
3811582 1 2002202222200202022020200200220200222200022220002200000201202000222022 
3712982 1 2002202222200202022020200200220200222200022220002200000200202000222022 
3712990 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713019 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713025 1 2002202211200202021011100101210200111101022121112100111110211110122122 
3713126 1 2002202222200202022020200200220200222200022220002200000200202000222022" 

teste <- strsplit(data, split = "\n") 

for(i in seq(1, length(teste[[1]]),1)) { 
    if (i==1) { 
    dataOut <- strsplit(teste[[1]][i], split = " ") 
    print(dataOut) 
    } else 
    dataOut <- strsplit(teste[[1]][i], split = " 1 ") 
    print(dataOut) 
} 
Verwandte Themen