【问题标题】:How can I read a csv file 10 in 10 line如何在 10 行中读取 csv 文件 10
【发布时间】:2016-03-08 20:50:10
【问题描述】:

我需要在 R 读取一个 csv 文件。我的文件有 100 行,我想在 10 行中读取 10 行。例如:

  1. 阅读前 10 行
  2. 从 11 开始读 10 行,因为我已经读了 10
  3. 从 22 开始读取 10 行,依此类推..

我尝试使用 for(i in 1:10) 或 while,但我无法在 11 后、22 后等读取文件..

有人知道我该怎么做吗?

谢谢!!

【问题讨论】:

  • 您只是想将文件分成 10 行的部分,还是出于某种原因需要分 10 行块读取它?
  • 查看skipnrows 参数到read.table/read.csv ...
  • 按原样读取数据然后重塑可能会更好。

标签: r file csv


【解决方案1】:

之前可能回答过很多次(例如,me),但这里有一些数据

fl = tempfile()
dim(mtcars)
write.csv(mtcars, file=fl)

使用connection 打开文件,然后读取 10 行

fin = file(fl, open="r")
nrows <- 10
data <- read.csv(fin, nrows=nrows)      # first chunk

记住列名和类

col.names <- names(data)                # remember column names and...
colClasses <- sapply(data, class)       # ... column classes

然后处理该块并读入下一个数据块,确保添加标题和列类。没有更多数据时停止读取。

repeat {
    ## process data...
    cat("Read", nrow(data), "rows\n")
    ## ...then read the next chunk
    data <- read.csv(fin, header=FALSE, colClasses=colClasses,
                     col.names=col.names, nrows=nrows)
    if (nrow(data) == 0)                # done yet?
        break
}

mtcars 有 32 行,我们看到了

Read 10 rows
Read 10 rows
Read 10 rows
Read 2 rows

我们可以验证每个块都有正确的标题,并且列都有一致的类。跨块可能存在因素和不一致级别的问题,尤其是在读取小块时;也许stringsAsFactors=FALSE 的论点合适?

【讨论】:

    【解决方案2】:
    for (i in seq(1, 100, by=10)) {
      cat(i, "\n")
      dat <- read.csv("yourfile.csv", skip = i-1, nrows = 10)
      print(dat)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 2016-06-10
      • 2016-11-28
      • 1970-01-01
      相关资源
      最近更新 更多