2014-06-27 12 views
6

sto scorrendo alcuni dati, e aggiungendo al file CSV. Quello che voglio è avere i nomi delle colonne nella parte superiore del file una volta, e poi mentre scorre per non ripetere i nomi delle colonne nel mezzo del file.usando nomi di colonna quando si aggiunge dati in write.table

Se lo faccio col.names=T, ripete compresi i nomi di colonna per ogni nuovo ciclo. Se ho col.names=F, non ci sono nomi di colonne.

come faccio a fare questo in modo più efficiente? Sento che questo è un caso comune che ci deve essere un modo per farlo, senza scrivere codice in particolare per gestirlo.

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

non testati, ma si potrebbe fare 'col.names = ifelse (ii% in% 1, TRUE, FALSE)' dove ii è l'iterazione del ciclo – rawr

+3

Non credo che sia così comune come si pensa. Normalmente si costruisce prima l'intero data.frame e poi lo si scrive una volta. – MrFlick

risposta

3

Si può o non può anche vedere un problema con i nomi di riga sono identici, come write.table non consente nomi di riga identici quando si aggiunge. Potresti provare. Nella prima scrittura su file, prova solo con write.table con row.names = FALSE. Poi, a partire dal secondo in scrittura al file, utilizzare sia col.names = FALSE e row.names = FALSE

Ecco la prima scrittura di file

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

Siamo in grado di controllare con read.table("file.txt", header = TRUE). Poi possiamo aggiungere lo stesso frame di dati a tale file con

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

E di nuovo siamo in grado di controllare con read.table("file.txt", header = TRUE)

Quindi, se si dispone di un elenco di frame di dati, dire dlst, il codice pezzo che aggiunge i frame di dati insieme potrebbe apparire qualcosa di simile

> 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)) 

Ma, come suggerisce @MrFlick, sarebbe molto meglio aggiungere i frame di dati in R, e poi inviarli a file una volta. Ciò eliminerebbe molti possibili errori/problemi che potrebbero verificarsi durante la scrittura su file. Se i dati sono in un elenco, che potrebbe essere fatto con

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

Grazie per il tuo commento. Quando provo quello che mi ha suggerito il seguente errore: Errore nella write.table (dd, "data.csv", raw.names = false): argomento non utilizzato (raw.names = FALSE) – user1754606

+0

non ho avuto un problema inizialmente con i nomi delle righe. – user1754606

+0

@ user1754606, ottieni questo errore perché hai sbagliato a digitare "row" come "raw" –

10

Vedi ?file.exists.

write.table(dd, "data.csv", append=TRUE, col.names=!file.exists("data.csv")) 

Pertanto i nomi di colonna vengono scritti solo quando non si aggiunge un file già esistente.

Problemi correlati