用fread从csv读取多个表并处理空白文件

时间:2019-04-19 21:17:29

标签: r csv data.table

为我提供了一个.csv文件,看起来像这样 csv file

除了右边包含约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 ,,

这就是为什么blank.lines.skip的{​​{1}}和fill参数不起作用的原因(SO中有一些关于这些主题的问题,但是我检查过的所有问题都只处理了其中的一个表) csv)。

因此,如果要删除所有空白行,我必须这样做

fread

问题是我大约有120个表,如果我决定遵循此路径,则必须对每个表的第一列的名称进行硬编码。

我的问题是:

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

1 个答案:

答案 0 :(得分:0)

您可以加载整个csv并使用一个函数来获取其中的子集。下面是在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)