Чтение нескольких таблиц из csv с помощью fread и обработка пустых файлов

#r #csv #data.table

#r #csv #data.table

Вопрос:

Мне дали .csv файл, который примерно выглядит так csv-файл

за исключением того, что он содержит около 120 таблиц справа, большинство из них разной длины. Для получения воспроизводимого примера найдите файл изображения здесь.

Я читаю таблицы 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

абр,4,,,

Вот почему blank.lines.skip и fill аргументы fread не работают (в SO есть несколько вопросов по этим темам, но все те, которые я проверил, касаются только одной таблицы в csv).

Поэтому, если я хочу удалить все пустые строки, я должен сделать

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

Проблема в том, что у меня около 120 таблиц, и, если я решу пойти по этому пути, мне придется жестко закодировать имена первых столбцов каждой таблицы.

Мои вопросы таковы:

  1. Есть ли лучший способ загрузить эти несколько таблиц из CSV?
  2. Как я мог программно удалить эти пустые строки?

Ответ №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)