У меня есть база данных с 250 столбцами, и я хочу прочитать только 50 из них вместо того, чтобы загружать их все, а затем удалять столбцы с dplyr::select
. Я полагаю, что могу сделать это, используя спецификацию столбца. Я не хочу вводить спецификацию столбца вручную для всех этих столбцов.
50 столбцов, которые я хочу сохранить, имеют общий префикс, скажем, «blop», поэтому мне удалось вручную изменить объект спецификации столбца, который я получил от readr::spec_csv
. Затем я использовал его для чтения моего файла данных:
short_colspec <- readr::spec_csv('myfile.csv')
short_colspec$cols <- lapply(names(short_colspec$cols), function(name){
if (substr(name, 1, 4) == 'blop'){
return(col_character())
} else {
return(col_skip())
}
})
short_data <- read_csv('myfile.csv', col_types = short_colspec)
Есть ли способ указать такую спецификацию столбца с функциями readr
(или любого другого пакета) более надежным способом, чем то, что я сделал?
readr
похоже на то, как вы это сделали, это подход. Потенциально его можно было бы улучшить с помощьюgrepl
, а неsubstr
, чтобы сделать его более гибким. Также ваш код предполагает, что все столбцы, которые вы читаете, являютсяcol_character
- person Chris   schedule 04.09.2018grepl
обеспечивает большую гибкость! Для простоты я предположил только строковые переменные, это правда, что синтаксисif else
можно расширить, чтобы учесть больше типов столбцов. - person Romain   schedule 05.09.2018