1

我有一个类似的问题: 使用 SQLDF 或 read.csv.sql 选择每 N 列

我想读取一些大文件的列(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=" "))
4

1 回答 1

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

有关更多示例,请参阅此博客文章。paste如果您知道有关列起始位置和宽度的详细信息,则可以轻松构建“选择”语句。

于 2013-10-31T13:09:23.267 回答