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.
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>
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)
Utilisez plutôt write.table () comme ceci:
write.table(mydf, "/tmp/mydf.csv", row.names=F, col.names=F, sep=",")