Как читать в текстовом файле на R с использованием textConnection и библиотеки (sqldf)

Я пытаюсь прочитать текстовый файл в 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

Я попробовал это по примеру

test_table <- read.table(textConnection("test.table.1.0"))

Я вижу, что проблема в том, что textConnection должен принимать символьный вектор, и я даю ему data.frame, но преобразование его через as.character также не удается. В конечном счете, я хочу выполнить запрос, подобный этому:

sqldf("select test_table.source from test_table");

3 ответа

Решение

В комментарии Анико есть почти все, что вам нужно (вместе с header=TRUE):

R> data <- read.table("test.table.1.0", header=TRUE)
R> data
  id Source
1  1    A10
2  2    A32
3  3    A10
4  4    A25
R> 

Другими словами, если у вас есть данные в файле, читайте из файла. TextConnection полезен, если и когда у вас есть данные "прямо там" вместе с командой, как в электронном письме, на которое вы ссылались.

Можно перейти непосредственно в SQLITE, используя read.csv.sql() ИЛИ read.csv2.sql() из пакета sqldf.

Из онлайн-руководства:

Ссылка на сайт

Пример 13. read.csv.sql и read.csv2.sql read.csv.sql - это интерфейс к sqldf, который работает как read.csv в R, за исключением того, что он также предоставляет аргумент sql=, а не все другие аргументы read.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") 

Если ваши данные не так уж велики, read.table() прекрасно работает. Если у вас есть данные, вы можете найти read.table или read.csv немного медленными. В этом случае вы можете читать данные непосредственно в sqlite из R с помощью пакета sqldf. Вот пример:

library(sqldf)
f <- file(“test.table.1.0”)
bigdf <- sqldf(“select * from f”, dbname = tempfile(),
   file.format = list(header = T, row.names = F))

Несколько месяцев назад я написал личный анекдот о своем опыте использования этого метода.

По моему опыту извлечение данных непосредственно в sqlite - это НАМНОГО быстрее, чем чтение в R. Но дополнительный код не стоит, если вам подходит простой read.csv() или read.table ().

Другие вопросы по тегам