2014-06-27 3 views
6

Anhängen I durch einige Daten am Looping, und es CSV-Datei anhängen. Was ich will, ist Spaltennamen einmal auf der Oberseite der Datei zu haben, und dann wie es Schleifen, um Spaltennamen in der Mitte der Datei nicht zu wiederholen.Spaltennamen verwenden, wenn Daten in write.table

Wenn ich col.names=T tun, es wiederholt einschließlich Spaltennamen für jede neue Schleife. Wenn ich col.names=F habe, gibt es überhaupt keine Spaltennamen.

Wie kann ich dies tun am effizientesten? Ich denke, dass dies ein so weit verbreiteter Fall ist, dass es einen Weg geben muss, dies zu tun, ohne Code speziell dafür zu schreiben.

write.table(dd, "data.csv", append=TRUE, col.names=T) 
+0

nicht getestet, aber Sie könnten tun 'col.names = ifelse (ii% in% 1, WAHR, FALSCH)' wo ii ist Ihre Schleife Iteration – rawr

+3

Ich glaube wirklich nicht, dass dies so häufig ist, wie Sie es denken. Normalerweise erstellen Sie zuerst den gesamten data.frame und schreiben ihn dann einmal. – MrFlick

Antwort

3

Sie können oder nicht auch ein Problem mit den Zeilennamen identisch sind, wie write.table sieht nicht identisch Zeilennamen erlauben beim Anhängen. Du könntest es versuchen. Versuchen Sie in dem ersten Schreiben in Datei write.table nur mit row.names = FALSE. Dann wird aus dem zweiten Schreib starten, die Datei verwenden beide col.names = FALSE und row.names = FALSE

Hier ist der erste Schreib

> d1 <- data.frame(A = 1:5, B = 1:5)    ## example data 
> write.table(d1, "file.txt", row.names = FALSE) 

Wir haben es mit read.table("file.txt", header = TRUE) überprüfen einzureichen. Dann können wir den gleichen Datenrahmen auf diese Datei mit

> write.table(d1, "file.txt", row.names = FALSE, 
       col.names = FALSE, append = TRUE) 

anhängen Und wieder können wir es überprüfen mit read.table("file.txt", header = TRUE)

Also, wenn Sie eine Liste von Datenrahmen haben, sagen dlst, Ihr Code Chunk, der anfügt die Datenrahmen können zusammen so etwas wie

> dlst <- rep(list(d1), 3)        ## list of example data 
> write.table(dlst[1], "file.txt", row.names = FALSE) 
> invisible(lapply(dlst[-1], write.table, "file.txt", row.names = FALSE, 
        col.names = FALSE, append = TRUE)) 

aussehen Aber wie @MrFlick vermuten lässt, wäre es viel besser, die Datenrahmen in R anhängen, und sie dann einmal in Datei senden. Dies würde viele mögliche Fehler/Probleme beseitigen, die beim Schreiben in die Datei auftreten könnten. Wenn die Daten in einer Liste ist, wird das könnte geschehen mit

> dc <- do.call(rbind, dlst) 
> write.table(dc, "file.txt") 
+0

Danke für Ihren Kommentar. Wenn ich versuche, was Sie vorgeschlagen bekomme ich folgende Fehlermeldung: Fehler in write.table (dd, "data.csv", raw.names = false): nicht verwendetes Argument (raw.names = FALSE) – user1754606

+0

Ich habe kein Problem Anfangs mit Zeilennamen. – user1754606

+0

@ user1754606, erhalten Sie diesen Fehler, weil Sie "Zeile" als "raw" falsch geschrieben –

10

Siehe ?file.exists.

Daher werden Spaltennamen nur geschrieben, wenn Sie nicht an eine Datei anhängen, die bereits existiert.

Verwandte Themen