我有一个有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 (或任何其他包)函数来指定这样的列规范?
发布于 2018-09-04 22:03:09
使用data.table的fread,您可以选择要跳过(=删除)或保留(= select )的列
#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 )https://stackoverflow.com/questions/52167567
复制相似问题