web-dev-qa-db-fra.com

Exporter CSV sans noms de col.

J'ai besoin de prendre un data.frame Et de l'exporter vers un fichier CSV (ou autre chose, mais CSV semblait être le format le plus simple et bien formé) pour pouvoir l'importer dans une base de données SQLite.

Cependant, il semble que write.csv() nécessite que j'écrive une ligne d'en-tête, et la commande .import De SQLite nécessite que I don't ait une ligne d'en-tête. Voilà donc un peu de décalage.

Voici ce qui se passe si j'essaie d'omettre la ligne d'en-tête:

> write.csv(mydf, "/tmp/mydf.csv", row.names=F, col.names=F)
Warning message:
In write.csv(mydf, "/tmp/mydf.csv", row.names = F, col.names = F) :
  attempt to set 'col.names' ignored

Je dois me demander pourquoi il applique cela en premier lieu - le manuel dit "Ces wrappers sont délibérément inflexibles: ils sont conçus pour garantir que les bonnes conventions sont utilisées pour écrire un fichier valide. Tentatives pour modifier append, col.names, sep, dec ou qmethod sont ignorés, avec un avertissement. " Mais je ne sais rien dans la spécification ou ailleurs nécessitant des noms de colonnes - en effet, la plupart des outils (Excel, etc.) ne les traitent pas spécialement.

56
Ken Williams

Si vous ne pouvez pas les battre, rejoignez-les.

Si vous passez à write.table() (que write.csv() appelle quand même), vous êtes en or:

R> write.table(trees, file="/tmp/trees.csv", 
+              row.names=FALSE, col.names=FALSE, sep=",")
R> system("head /tmp/trees.csv")
8.3,70,10.3
8.6,65,10.3
8.8,63,10.2
10.5,72,16.4
10.7,81,18.8
10.8,83,19.7
11,66,15.6
11,75,18.2
11.1,80,22.6
11.2,75,19.9
R>
108
Dirk Eddelbuettel

Vous pouvez l'importer directement dans SQLite. Ce qui suit importe le cadre de données intégré BOD dans la base de données SQLite my.db (création my.db s'il n'existe pas déjà).

library(RSQLite)
con <- dbConnect(SQLite(), dbname = "my.db")
dbWriteTable(con, "BOD", BOD, row.names = FALSE)
dbDisconnect(con)
10
G. Grothendieck

Utilisez plutôt write.table () comme ceci:

write.table(mydf, "/tmp/mydf.csv", row.names=F, col.names=F, sep=",")
5
jedfrancis