Подтвердить что ты не робот

Переопределять типы столбцов при импорте данных с помощью readr:: read_csv(), когда имеется много столбцов

Я пытаюсь прочитать файл csv, используя readr:: read_csv в R. Файл csv, который я импортирую, имеет около 150 столбцов, я просто включаю в себя первые несколько столбцов для примера. Я ищу, чтобы переопределить второй столбец от типа по умолчанию (который является датой, когда я делаю read_csv), для символа или другого формата даты.

GIS Join Match Code Data File Year  State Name  State Code  County Name County   Code   Area Name   Persons: Total
G0100010    2008-2012   Alabama 1   Autauga County  1   Autauga County, Alabama 54590

df <- data.frame("GIS Join Match Code"="G0100010", "Data File" = "2008-2012", "State" = "Alabama", "County" = "Autauga County", "Population" = 54590)

Проблема в том, что когда я использую readr:: read_csv, кажется, мне, возможно, придется использовать все переменные, переопределяя в col_types (см. ниже). Это необходимо указать, чтобы перекрывать все 150 столбцов отдельно (?). Вопрос в том, что: есть ли способ указать переопределение типа col_ только определенных столбцов или именованного списка объектов? В моем случае это будет просто переопределять столбец "Год файла данных".

Я понимаю, что любые пропущенные столбцы будут автоматически проанализированы, что отлично подходит для моего анализа. Я думаю, что это становится более сложным, поскольку имена столбцов имеют место в них в загруженном мной файле (например, "Год файла данных", "Код состояния" ) и т.д.

tempdata <- read_csv(df, col_types = "cc")
Error: You have 135 column names, but 2 columns

Другой вариант, я думаю, если это возможно, просто пропустить чтение второго столбца вместе?

4b9b3361

Ответ 1

Далее следует более общий ответ на этот вопрос, если кто-то случайно наткнется на это в будущем. Менее целесообразно использовать "пропустить" для перехода к столбцам, поскольку это не сработает, если импортированная структура источника данных будет изменена.

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

Например, если все столбцы обычно являются "d", но столбец даты должен быть "D", загрузите данные следующим образом:

  read_csv(df, col_types = cols(.default = "d", date = "D"))

или если, например, дата столбца должна быть "D", а столбец "xxx" - "i", сделайте следующее:

  read_csv(df, col_types = cols(.default = "d", date = "D", xxx = "i"))

Использование "по умолчанию" выше является мощным, если у вас несколько столбцов и только определенные исключения (например, "дата" и "ххх" ).

Ответ 2

Да. Например, чтобы заставить числовые данные обрабатываться как символы:

examplecsv = "a,b,c\n1,2,a\n3,4,d"
read_csv(examplecsv)
# A tibble: 2 x 3
#      a     b     c
#  <int> <int> <chr>
#1     1     2     a
#2     3     4     d
read_csv(examplecsv, col_types = cols(b = col_character()))
# A tibble: 2 x 3
#      a     b     c
#  <int> <chr> <chr>
#1     1     2     a
#2     3     4     d

Возможные варианты:

col_character() 
col_date()
col_time() 
col_datetime() 
col_double() 
col_factor() # to enforce, will never be guessed
col_integer() 
col_logical() 
col_number() 
col_skip() # to force skip column

Подробнее: http://readr.tidyverse.org/articles/readr.html