从 csv 中读取特定的(非连续的)行

标签 r csv

我有一个很大的 csv 文件,只想读取某些行,这些行由要读取的行号向量定义。有什么方法可以在不将整个 csv 读入内存的情况下读取这些行?

我发现的唯一解决方案似乎允许读取连续的行(例如第 2-100 行)。

最佳答案

关于如何将我链接到的 sed 方法组合到 R 函数中的一个简单示例:

read_rows <- function(file,rows,...){
  tmp <- tempfile()
  row_cmd <- paste(paste(rows,"p",sep = ""),collapse = ";")
  cmd <- sprintf(paste0("sed -n '",row_cmd,"' %s > %s"),file,tmp)
  system(command = cmd)
  read.table(file = tmp,...)
}

write.csv(x = mtcars,file = "~/Desktop/scratch/mtcars.csv")

    > read_rows(file = "~/Desktop/scratch/mtcars.csv",rows = c(3,6,7),sep = ",",header = FALSE,row.names = 1)
                    V2 V3  V4  V5   V6    V7    V8 V9 V10 V11 V12
Mazda RX4 Wag     21.0  6 160 110 3.90 2.875 17.02  0   1   4   4
Hornet Sportabout 18.7  8 360 175 3.15 3.440 17.02  0   0   3   2
Valiant           18.1  6 225 105 2.76 3.460 20.22  1   0   3   1
> read_rows(file = "~/Desktop/scratch/mtcars.csv",rows = c(1,5,9),sep = ",",header = TRUE,row.names = 1)
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2

请注意第 1 行作为列标题的区别。

关于从 csv 中读取特定的(非连续的)行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57481017/

相关文章:

c - 如何使用 SQLite3 C 接口(interface)将 CSV 文件加载到主内存数据库中?

javascript - 从 CSV 文件中解析\r 字符串

Python:解析多个csv文件并跳过没有关键字的文件

java - 带有列标题的 StatefulBeanToCsv

mysql - 如何将 MySQL 的查询结果以格式化的 CSV 格式导出到标准输出?

R:解压缩文件的通用函数

html - knitr Markdown LateX 类似于 HTML 文档中的表格

r - 时间序列段没有拟合模型线

r - 如何在 R 中按日期对事件求和

r - 根据滚动日期内存在的条件创建新列