Переопределять типы столбцов при импорте данных с помощью 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
Другой вариант, я думаю, если это возможно, просто пропустить чтение второго столбца вместе?
Ответы
Ответ 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