Только для чтения n-й столбец текстового файла, который не имеет заголовка с R и sqldf

У меня есть аналогичная проблема, подобная этому вопросу: выбор каждый N-й столбец при использовании SQLDF или read.csv.sql

Я хочу прочитать некоторые столбцы больших файлов (таблица из 150 строк,> 500 000 столбцов, разделенных пробелами, заполненных числовыми данными и доступной только 32-битной системой). У этого файла нет заголовка, поэтому код в теме выше не работал, и я решил написать новый пост.

У вас есть идея решить эту проблему?

Я думал о чем-то подобном, но любые результаты с fread или read.table тоже в порядке:

MyConnection <- file("path/file.txt")
df<-sqldf("select column 1 100 1000 235612 from MyConnection",file.format = list(header=F,sep=" "))

person Community    schedule 31.10.2013    source источник
comment
Используйте keep <- c(1, 100, 1000, 235612); colClasses <- replace(rep("NULL", nc), keep, NA) в решениях по ссылке, которую вы упомянули, за исключением соответствующих изменений для ваших данных. Обратите внимание, что sqldf прочитает все столбцы в SQLite, но извлечет только столбцы из keep в R.   -  person G. Grothendieck    schedule 31.10.2013


Ответы (1)


Вы можете использовать substr, чтобы указать начальную и конечную позицию столбцов, которые вы хотите прочитать, если они имеют фиксированную ширину:

x <- tempfile()
cat("12345", "67890", "09876", "54321", sep = "\n", file = x)

myfile <- file(x)

sqldf("select substr(V1, 1, 1) var1, substr(V1, 3, 5) var2 from myfile")
#   var1 var2
# 1    1  345
# 2    6  890
# 3    9   76
# 4    5  321

Дополнительные примеры см. в этой записи в блоге. Оператор "select" можно легко построить с помощью paste, если вы знаете подробности о начальных позициях и ширине столбцов.

person A5C1D2H2I1M1N2O1R2T1    schedule 31.10.2013