我正在尝试将文本文件读入R中,因此我可以使用sqldf函数.我正在关注这个例子,https://stat.ethz.ch/pipermail/r-help/2008-January/152040.html,但我有一个文本文件,其中包含我的数据,而不是粘贴的数据,因为示例有它.我的文本文件如下:
#"test.table.1.0" file has this contents:
id Source
1 A10
2 A32
3 A10
4 A25
Run Code Online (Sandbox Code Playgroud)
我按照这个例子尝试了这个
test_table <- read.table(textConnection("test.table.1.0"))
Run Code Online (Sandbox Code Playgroud)
我可以看到问题是textConnection应该采用一个字符向量,我给它一个data.frame,但是通过as.character转换它也会失败.最终,我想运行这样的查询:
sqldf("select test_table.source from test_table");
Run Code Online (Sandbox Code Playgroud)
可以使用sqcmf包中的read.csv.sql()或read.csv2.sql()直接进入SQLITE.
从在线手册:
示例13. read.csv.sql和read.csv2.sql read.csv.sql是sqldf的接口,其工作方式类似于R中的read.csv,除了它还提供了sql =参数而不是所有其他读取参数支持.csv.它使用(1)SQLite的RSQLite导入工具将输入文件读入基于磁盘的临时SQLite数据库,该数据库是即时创建的.(2)然后它使用提供的SQL语句读取如此创建为R的表.第一步将数据直接导入SQLite而不经过R它可以处理比R本身可以处理的更大的文件,只要SQL语句过滤它达到R可以处理的大小.以下是使用此工具重做的示例6c:
# Example 13a.
library(sqldf)
write.table(iris, "iris.csv", sep = ",", quote = FALSE, row.names = FALSE)
iris.csv <- read.csv.sql("iris.csv",
sql = "select * from file where Sepal_Length > 5")
# Example 13b. read.csv2.sql. Commas are decimals and ; is sep.
library(sqldf)
Lines <- "Sepal.Length;Sepal.Width;Petal.Length;Petal.Width;Species
5,1;3,5;1,4;0,2;setosa
4,9;3;1,4;0,2;setosa
4,7;3,2;1,3;0,2;setosa
4,6;3,1;1,5;0,2;setosa
"
cat(Lines, file = "iris2.csv")
iris.csv2 <- read.csv2.sql("iris2.csv", sql = "select * from file where Sepal_Length > 5")
Run Code Online (Sandbox Code Playgroud)
如果你的数据不是那么大,read.table()效果很好.如果你有数据,你可能会发现read.table或read.csv有点慢.在这种情况下,您可以使用sqldf包将数据直接从R读取到sqlite中.这是一个例子:
library(sqldf)
f <- file(“test.table.1.0”)
bigdf <- sqldf(“select * from f”, dbname = tempfile(),
file.format = list(header = T, row.names = F))
Run Code Online (Sandbox Code Playgroud)
几个月前,我写了一篇关于使用这种方法的经验的个人轶事.
根据我的经验,将数据直接拖入sqlite比将其读入R更快.但如果简单的read.csv()或read.table()适合您,则不值得额外的代码.
| 归档时间: |
|
| 查看次数: |
3082 次 |
| 最近记录: |