2016-06-23 19 views
0

Ich habe ein eigenartiges Problem mit einer Datei in R. Kurz gesagt, trotz Sub-Einstellung der Datenrahmen, wenn ich die Teilmenge in Datei schreiben, in einige von In den Zeilen gibt es viele viele Spalten, die nicht da sein sollten (es sollten nur 6 sein).R: (Unerklärlich) Falsche Unterteilung von Datenrahmen Spalten

Die Eingabedatei besteht aus 806 Zeilen (inkl. Kopfzeile) und es gibt 39 tabellierte Spalten (mit awk verifiziert, dass jede Zeile 39 Spalten enthält). Die Werte in den Spalten 4 bis zum Ende können oder dürfen nicht vorhanden sein (wenn Sie also ein Leerzeichen sehen, gibt es Tabulatoren (^ I)). Ein kleiner Teil der Eingabedatei ist hier:

Gene_Name Accession Identified Proteins 201-L-W1_Inj_1 201-L-W1_Inj_2 201-L-W1_Inj_3 201-L-W2_Inj_1 201-L-W2_Inj_2 201-L-W2_Inj_3 201-L-W3_Inj_1 201-L-W3_Inj_2 201-L-W3_Inj_3 201-M9-W1_Inj_1 201-M9-W1_Inj_2 201-M9-W1_Inj_3 201-M9-W2-Inj-1 201-M9-W2_Inj_2 201-M9-W2_Inj_3 201-M9-W3_Inj_1 201-M9-W3_Inj_2 201-M9-W3_Inj_3 241-L-W1-Inj-1 241-L-W1-Inj-2 241-L-W1-Inj-3 241-L-W2_Inj_1 241-L-W2_Inj_2 241-L-W2_Inj_3 241-L-W3_Inj_1 241-L-W3_Inj_2 241-L-W3_Inj_3 241-M9-W1-Inj-1 241-M9-W1-Inj-2 241-M9-W1-Inj-3 241-M9-W2_Inj_1 241-M9-W2_Inj_2 241-M9-W2_Inj_3 241-M9-W3_Inj_1 241-M9-W3_Inj_2 241-M9-W3_Inj_3 
pyrD P0A7E2 PYRD_ECO57 Dihydroorotate dehydrogenase (quinone) OS=Escherichia coli O157:H7 GN=pyrD PE=3 SV=1                         2.7779 1.397 0         
ECs3310 Q8XBI1 Q8XBI1_ECO57 Putative uncharacterized protein ECs3310 OS=Escherichia coli O157:H7 GN=ECs3310 PE=4 SV=1       1.4577 0 12.44                           
ECs1643 Q8X306 Q8X306_ECO57 Tail length tape measure protein OS=Escherichia coli O157:H7 GN=ECs1643 PE=4 SV=1                   4.8211 7.3495 4.2218               
kdsA Q8XDE7 KDSA_ECO57 2-dehydro-3-deoxyphosphooctonate aldolase OS=Escherichia coli O157:H7 GN=kdsA PE=3 SV=1 0 3.0417 1.9614    6.1146 0 7.0412 2.5376 4.128 3.892 11.617 6.4643 9.7451 3.9381 9.3383 3.769 7.3208 6.2054 8.5019    7.4705 6.5698 0 0 6.6558 3.3947    3.4406 2.202 2.4065 
accB P0ABE0 BCCP_ECO57 Biotin carboxyl carrier protein of acetyl-CoA carboxylase OS=Escherichia coli O157:H7 GN=accB PE=3 SV=1 33.051 26.177 33.725 72.514 76.632 69.373 28.365 24.361 28.925 18.539 26.286 45.222 17.288 15.371 14.752    51.929 71.73 83.253 14.222 6.3663 14.639 0 15.463 15.532 40.591 46.665 6.1286 7.8726 6.3663 6.0564 3.9755 3.1308 5.1279 
rpsH P0A7W9 RS8_ECO57 30S ribosomal protein S8 OS=Escherichia coli O157:H7 GN=rpsH PE=3 SV=2 25.085 22.069 22.847 13.212 12.468 17.123 0 13.804 11.955 15.179 12.011 12.65 41.011 40.82 39.526 26.52 9.9107 25.237 37.181 31.671 35.152 22.441 20.259 35.828 10.233 9.9107 9.154 11.521 10.518 10.781 

hier ein Stück Code ist:

myDF <- read.table('corpus.txt', header=T, sep='\t', row.names=NULL, strip.white=TRUE) 

df_201_L_W1 <- myDF[, c(1, 2, 3, 4, 5, 6)] 
write.table(df_201_L_W1, 'test.txt', sep = '\t', row.names = F, col.names = T, quote = F) 

Und hier einige ausgewählte Zeilen aus der Ausgabe test.txt-Datei:

Gene_Name Accession Identified.Proteins X201.L.W1_Inj_1 X201.L.W1_Inj_2 X201.L.W1_Inj_3 
pyrD P0A7E2 PYRD_ECO57 Dihydroorotate dehydrogenase (quinone) OS=Escherichia coli O157:H7 GN=pyrD PE=3 SV=1 NA NA NA 
ECs3310 Q8XBI1 Q8XBI1_ECO57 Putative uncharacterized protein ECs3310 OS=Escherichia coli O157:H7 GN=ECs3310 PE=4 SV=1 NA NA NA 
bcp P0AE54 BCP_ECO57 Putative peroxiredoxin bcp OS=Escherichia coli O157:H7 GN=bcp PE=3 SV=1 21.141 20.656 21.848 19.244 22.566 24.825 21.479 39.426 31.104 21.106 15.923 18.584 21.353 20.523 22.85 40.793 39.367 43.937 18.917 16.638 19.231 25.408 28.161 26.875 55.172 57.421 10.651 15.704 16.638 16.5 22.632 21.546 22.463 
rpsH P0A7W9 RS8_ECO57 30S ribosomal protein S8 OS=Escherichia coli O157:H7 GN=rpsH PE=3 SV=2 25.085 22.069 22.847 

Die vorletzte Zeile enthält weit mehr als 6 Spalten und ich weiß nicht warum. Hilfe wird wie immer sehr geschätzt.

+0

Dies sieht nicht wie Daten in einem Matrix-ähnlichen Format aus ... – Roland

+0

@Roland - Können Sie bitte Ihren Kommentar erweitern? – cer

+0

@cer Hast du 'myDF' und' df_201_L_W1' Werte überprüft? Waren sie in Ordnung? – Tung

Antwort

3

Protein Namen haben oft einfache Anführungszeichen,

5'-methylthioadenosine phosphorylase 
ATP synthase B' chain 
ppGpp 3'-pyrophosphohydrolase 

versuchen so quote="" die read.table Optionen hinzuzufügen.

+0

Danke @ChrisS. Das hat das Problem gelöst. – cer

0

Zusätzlich zu der Antwort von Chris S führte auch die Verwendung des readr-Pakets zu den gewünschten Ergebnissen.

myDF <- read_delim('corpus.txt', delim='\t') 

[EDIT] Gemäß Bens Aussage sollte read.delim aus dem Kasten heraus arbeiten.

+2

Sie brauchen nicht das 'readr' Paket ...' read.delim ("corpus.txt") '(von Base R) sollte genauso gut funktionieren. –

+0

Vielen Dank für diesen Tipp @BenBolker – cer

+0

Guter Punkt, die Standard read.table verwendet 'quote =" \ "'" 'und read.delim lässt das einfache Zitat' quote = "\" "' fallen –

Verwandte Themen