#r #csv #data.table
#r #csv #data.table
Вопрос:
Мне дали .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 таблиц, и, если я решу пойти по этому пути, мне придется жестко закодировать имена первых столбцов каждой таблицы.
Мои вопросы таковы:
- Есть ли лучший способ загрузить эти несколько таблиц из CSV?
- Как я мог программно удалить эти пустые строки?
Ответ №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)