R中如何读取大数据

这个是一个复杂的问题。但是本文只是给出一点点小经验。

假设我们有一个大文件需要读入R,但是我们不太确定文件是什么样子的,或者说,我们很确定文件是什么样子的,但是我们只想读入其中某些列,应该怎么办呢?

如果你的足够的内存和耐心,你可以按常规:

data <- read.table("datatable.txt")
head(data)

如果你在列表表头时发现数据并不是你想象的格式,这无疑是让人很难受的一件事情。那如何避免错误地读入数据呢?

tab5rows <- read.table("datatable.txt", nrows = 5); tab5rows
classes <- sapply(tab5rows, class) #在查看文件头几行读入正确后再整体读入所有数据
data <- read.table("datatable.txt", colClasses = classes)

上面的代码让我们可以在很少的时间内对读入的数据进行一个检查,如果认为没有问题,就可以读入整个数据了。

如果我们看了文件头之后,决定只读入其中的几列,应该怎么办呢?

tab5rows <- read.table("datatable.txt", nrows = 5); tab5rows
classes <- sapply(tab5rows, class) #假设我们只想读入第一和第三列
classes[c(-1,-3)] <- rep("NULL", length(classes)-2)
data <- read.table("datatable.txt", colClasses = classes)

3 thoughts on “R中如何读取大数据

  1. 您好,我有一个415,090 rows,336columns的一个大数据,运行data<-read.table后,再运行nrow(data),发现只有207,800 rows,您知道有什么办法能读取所有行数吗?

    1. 这个现象非常奇怪。理论上无论文件有多少行,只要你不设定读行数,它就应该把所有的数据都读进来。你需要查看你的数据本身编码是否正常,是否在文件中出现的文件终止符。

    2. 还有一个办法,你可以使用
      con <- file(filename) open(con) for(i in 1:ceiling(linesNum/block)){ data[i+0:(block-1),] <- read.table(con, n=block, header=FALSE) } close(con)

发表评论

电子邮件地址不会被公开。 必填项已用*标注