如何跳过阅读器中的某些列

ver*_*lcw 19 r readr

我有一个名为"test.csv"的简单csv文件,其中包含以下内容:

colA,colB,colC
1,"x",12
2,"y",34
3,"z",56
Run Code Online (Sandbox Code Playgroud)

假设我想跳过colA读取,只读colB和colC.我想要一个通用的方法来做这个,因为我有很多文件要读入,有时colA被称为其他东西,但colB和colC总是相同的.

根据read_csv文档,实现此目的的一种方法是为col_types传递命名列表,并仅命名要保留的列:

read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))
Run Code Online (Sandbox Code Playgroud)

如果不提及colA,它应该从输出中删除.但是,结果数据框是:

Source: local data frame [3 x 3]

      colA colB colC
    1    1    x   12
    2    2    y   34
    3    3    z   56
Run Code Online (Sandbox Code Playgroud)

我做错了什么或read_csv文档不正确?根据帮助文件:

如果是列表,则每列必须包含一个"收集器".如果您只想读取列的子集,则可以使用命名列表(其中名称给出列名称).如果未按名称提及列,则不会将其包含在输出中.

ver*_*lcw 11

有一个答案,我只是没有足够的搜索:https: //github.com/hadley/readr/issues/132

显然这是一个已经纠正的文档问题.最终可能会添加此功能,但Hadl​​ey认为能够更新一个列类型而不删除其他列类型更有用.

  • 所以当前正确的简短答案是:否? (3认同)

smc*_*mci 6

“根据 read_csv 文档,实现此目的的一种方法是传递 col_types 的命名列表,并仅命名要保留的列”

WRONG: read_csv('test.csv', col_types=list(colB='c', colC='c'))
Run Code Online (Sandbox Code Playgroud)

不,该文档具有误导性,您必须指定删除未命名的列(class= '_'/ col_skip()),或者明确将其类指定为 NULL:

read_csv('test.csv', col_types=list('*'='_', colB='c', colC='c'))

read_csv('test.csv', col_types=list('colA'='_', colB='c', colC='c'))
Run Code Online (Sandbox Code Playgroud)