【问题标题】:Read multiple tables from csv with fread and deal with blank files用 fread 从 csv 读取多个表并处理空白文件
【发布时间】:2019-09-10 02:04:20
【问题描述】:

我收到了一个大致如下所示的.csv 文件

除了它在右侧包含大约 120 个表格,其中大部分的长度不同。出于可重现的示例目的,请查找图像文件here

我正在阅读带有data.table::fread 的表格,如下所示:

t1 <- fread("testFread.csv", skip = 1, select = 1:2)
t2 <- fread("testFread.csv", skip = 1, select = 4:5)

t2 表较短,有很多空行。请注意,它们不是NA 行。它们是"" 行。如果我在文本编辑器中打开 .csv 文件,原因就很清楚了:第 6 行是

abr,4,,,

这就是为什么 freadblank.lines.skipfill 参数不起作用(SO 中有一些关于这些主题的问题,但我检查的所有问题都只处理 csv 中的一个表)。

所以如果我想删除所有空行,我必须这样做

t2 <- t2[animal != "", ]

问题是我有大约 120 个表,如果我决定走这条路,将不得不硬编码每个表的第一列的名称。

我的问题是:

  1. 有没有更好的方法从 csv 加载这些多个表?
  2. 如何以编程方式删除这些空白行?

【问题讨论】:

    标签: r csv data.table


    【解决方案1】:

    您可以加载整个 csv 并使用函数从中取出子集。下面是一个在base R中完成的示例,

    full_csv <- read.csv("test.csv", header = FALSE, stringsAsFactors = FALSE)
    
    get_subset <- function(data, start, end) {
        data <- data[ 2:nrow(data), start:end ]
        full_row_data <- apply( data[ , names(data)], 1, paste, collapse = "" )
        data[ full_row_data != "", ]
    }
    
    get_subset(full_csv, 1, 2)
    

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 2015-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多