我需要使用data.frame
并将其导出为CSV文件(或其他内容,但CSV似乎是最简单的格式),因此我可以将其导入SQLite数据库。
但是,看起来write.csv()
要求我写一个标题行,而SQLite的.import
命令要求我不有一个标题行。所以这有点不匹配。
如果我尝试省略标题行,会发生以下情况:
> 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
我不得不想知道为什么它首先强制执行 - 手册说“这些包装器故意不灵活:它们旨在确保使用正确的约定来编写有效文件。尝试更改{ {1}},append
,col.names
,sep
或dec
会被忽略,并会收到警告。“但我在规范或其他地方都不知道需要列名 - 实际上,大多数工具(Excel等)都不会特别对待它们。
答案 0 :(得分:106)
如果你无法击败他们,请加入他们。
如果您切换到write.table()
(无论如何write.csv()
来电),您就是金色的:
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>
答案 1 :(得分:10)
您可以直接将其导入SQLite。以下内容将内置数据框BOD
导入SQLite数据库my.db
(如果它尚不存在,则创建my.db
。)
library(RSQLite)
con <- dbConnect(SQLite(), dbname = "my.db")
dbWriteTable(con, "BOD", BOD, row.names = FALSE)
dbDisconnect(con)
答案 2 :(得分:5)
使用write.table()代替:
write.table(mydf, "/tmp/mydf.csv", row.names=F, col.names=F, sep=",")