【发布时间】:2015-09-17 23:06:38
【问题描述】:
我有一个名为“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 文档不正确?根据帮助文件:
如果是一个列表,它必须为每一列包含一个“收集器”。如果你 只想读取列的子集,可以使用命名列表 (其中名称给出列名)。如果未提及列 按名称,它不会包含在输出中。
【问题讨论】:
-
data.table的fread有drop和select参数,供参考 -
@jaap,不是重复的。这个问题是关于 readr::read_csv() 的,另一个问题是关于 utils::read.table() 的。
-
@Angelo 是的。链接的问题是关于阅读有限数量的列。在撰写该问题时,
readr::read_csv甚至都不存在。同时,它已被添加为答案(由我),以提供read.table/read.csv的替代方法,因此可以用作重复目标。 -
@Jaap,好的,但是在提供范围明显大于原始问题的规范答案时,更改问题及其标签可能更好?或者您可以按照自己的方式回答问题:在 util::read.table() 的上下文中回答旧问题,在 readr::read_*() 的上下文中回答这个新问题。
-
@Angelo 在我看来,最好将旧问题更改为扩大其范围(就像我刚才所做的那样),因为它经常被用作规范的重复目标。