如何使用readr为类似名称的列定义列规范?

时间:2018-09-04 13:33:18

标签: r dplyr readr

我有一个包含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 :(得分:1)

使用data.table的{​​{1}},您可以选择要跳过(=删除)或保留(= select)的列

fread