Как определить спецификацию столбца для одноименного столбца с readr? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть база данных с 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 (или любого другого пакета) более надежным способом, чем я?

1 Ответ

0 голосов
/ 04 сентября 2018

используя data.table fread, вы можете выбрать столбцы, которые хотите пропустить (= удалить) или сохранить (= выбрать)

#read first line of file to select which columns to keep
#adjust the strsplit-character here ';' according to your csv-type
keep_col <- readLines( "myfile.csv", n = 1L ) %>% strsplit( ";" ) %>% el() %>% grep( "blop", . )
#read file, only the desired columns
fread( "myfile.csv", select = keep_col )
...