如何在readr中跳过某些列的读取

如何在readr中跳过某些列的读取,r,readr,R,Readr,我有一个名为“test.csv”的简单csv文件,包含以下内容: colA,colB,colC 1,"x",12 2,"y",34 3,"z",56 比如说,我不想读可乐,只想读可乐和可乐。我想要一个通用的方法来做到这一点,因为我有很多文件要读,有时可乐被称为其他东西,但colB和colC总是一样的 根据read_csv文档,实现此目的的一种方法是传递列类型的命名列表,并仅命名要保留的列: read_csv('test.csv', col_types = list(colB = col_cha

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

colA,colB,colC
1,"x",12
2,"y",34
3,"z",56
比如说,我不想读可乐,只想读可乐和可乐。我想要一个通用的方法来做到这一点,因为我有很多文件要读,有时可乐被称为其他东西,但colB和colC总是一样的

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

read_csv('test.csv', col_types = list(colB = col_character(), colC = col_numeric()))
如果不提及可乐,它应该从输出中删除。但是,生成的数据帧是:

Source: local data frame [3 x 3]

      colA colB colC
    1    1    x   12
    2    2    y   34
    3    3    z   56
我是做错了什么,还是读取的csv文档不正确?根据帮助文件:

如果是列表,则每列必须包含一个“收集器”。如果你 如果只想读取列的子集,可以使用命名列表 (其中名称给出了列名)。如果未提及某列 按名称,它将不包括在输出中


有一个答案,我只是没有努力搜索:

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

更新:已添加该功能

以下代码来自:

read_csv(“iris.csv”,col_types=cols_only(物种=col_因子(c(“setosa”,“versicolor”,“virginica”))))

这将仅读取iris数据集的物种列。为了仅读取特定列,您还必须通过列规范,即
列系数
列系数
,等等

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

不,文档有误导性,您必须指定删除未命名的列(class=
'
/
col\u 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'))

数据。表
fread
具有用于此目的的
drop
select
参数,例如reference@jaap,不是复制品。这个问题是关于readr::read_csv()的,另一个问题是关于utils::read.table()。@Angelo是的。链接的问题是关于阅读有限数量的专栏。在撰写该问题时,
readr::read\u csv
甚至不存在。同时,它被添加为一个答案(由我)以提供
read.table
/
read.csv
的替代方法,因此可以作为一个重复的目标。@Jaap,好的,但是当提供一个范围明显大于原始问题的规范答案时,更改问题及其标记可能更好?或者你可以用自己的方式回答问题:在util::read.table()的上下文中回答旧问题,在readr::read_*()的上下文中回答新问题。@Angelo在我看来,最好把旧问题改得太宽(就像我刚才做的那样)因为它经常被用作标准的复制目标。所以当前正确的简短答案是:否?即使在readr 1.0发布之后,答案仍然是“否”。参见github,该漏洞在2017年5月1.1.1版中修复。你能确认并相应地更新你的答案吗?这个例子只读取iris数据集中的物种列
read\u csv(“iris.csv”,col\u types=cols\u only(物种=col\u因子(c(“setosa”,“versicolor”,“virginica”))
。如果只想读取特定列,还必须通过列规范,即
col\u factor()
col\u double
,等等。。。
read_csv('test.csv', col_types=list('*'='_', colB='c', colC='c'))

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