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

时间:2015-06-30 23:43:43

标签: r readr

我有一个名为" test.csv"的简单csv文件。具有以下内容:

colA,colB,colC
1,"x",12
2,"y",34
3,"z",56

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

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

read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))

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

Source: local data frame [3 x 3]

      colA colB colC
    1    1    x   12
    2    2    y   34
    3    3    z   56

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

  

如果是列表,则必须包含一个"收集器"对于每一列。如果你   只想读取列的子集,可以使用命名列表   (名称给出列名称)。如果没有提到列   按名称,它不会包含在输出中。

2 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:3)

  

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

WRONG: read_csv('test.csv', col_types=list(colB='c', colC='c'))

不,该文档具有误导性,您必须指定删除未命名的cols(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'))