Игнорировать завершающие разделители в readr :: read_csv

Когда я читаю CSV-файл, содержащий конечный разделитель с использованием readr::read_csv, я получаю предупреждение о том, что было заполнено отсутствующее имя столбца. Вот содержимое короткого примера CSV-файла для воспроизведения этого предупреждения (сохраните следующий фрагмент в файле с именем example.csv ):

A,B,C,
2,1,1,
14,22,5,
9,-4,8,
17,9,-3,

Обратите внимание на конечную запятую в конце каждой строки. Теперь, если я загружу этот файл с

read_csv("example.csv")

Я получаю следующее предупреждение:

Missing column names filled in: 'X4'

Даже если я хочу явно загрузить только 3 столбца с

read_csv("example.csv", col_types=cols_only(A=col_integer(),
                                            B=col_integer(),
                                            C=col_integer()))

Я все еще получаю предупреждающее сообщение.

Это ожидаемое поведение или есть способ сообщить read_csv, что предполагается игнорировать все столбцы, кроме тех, которые я указал? Или есть другой способ привести в порядок этот (явно искаженный) CSV, чтобы конечные разделители удалялись / игнорировались?


person cbrnr    schedule 22.12.2016    source источник
comment
Можете ли вы добавить небольшой пример, показывающий проблему? Влияет ли предупреждение каким-либо образом на вывод или это просто сообщение?   -  person aosmith    schedule 05.01.2017
comment
Это просто предупреждение, но кажется странным, что даже с cols_only все столбцы кажутся импортированными. Я отредактировал свой вопрос, включив небольшой пример файла CSV, чтобы показать проблему.   -  person cbrnr    schedule 09.01.2017


Ответы (2)


Я не думаю, что ты сможешь. Из того, что я вижу в документации, cols_only() предназначен для объектов R, которые вы уже загрузили.

Однако функция fread() из библиотеки data.table позволяет вам выбирать определенные имена столбцов при чтении файла:

DT <- fread("filename.csv", select = c("colA","colB"))

person Oliver Frost    schedule 22.12.2016

Вот еще один пример с сообщением об ошибке.

> read_csv("1,2,3\n4,5,6", col_names = c("x", "y"))
Warning: 2 parsing failures.
row # A tibble: 2 x 5 col     row   col  expected    actual         file expected   <int> <chr>     <chr>     <chr>        <chr> actual 1     1  <NA> 2 columns 3 columns literal data file 2     2  <NA> 2 columns 3 columns literal data

# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     2
2     4     5

Вот исправление / взлом. Также см. Ссылку на SOF. Подавить проблемы синтаксического анализа читателя в r

> suppressWarnings(read_csv("1,2,3\n4,5,6", col_names = c("x", "y")))
# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     2
2     4     5
person AG1    schedule 21.08.2017
comment
В этом сообщении в блоге описывается как ловить только определенные предупреждения. Может быть полезно подавить только это конкретное предупреждение. - person nevrome; 09.11.2017