R data.table fread using named colClasses without header (e.g. no col.names?)

R data.table fread using named colClasses without header (e.g. no col.names?)

更新(2016 年 6 月)

col.names 是在 data.table 1.9.6 上添加的,所以问题已经结束,每个人都非常高兴 :) 我想我现在可以毫无顾虑地将我所有的 read.csv 调用转换为 fread 调用毁灭

原题

使用 data.table 1.9.4

我正在导入 read.csv 对 fread 的调用,因为我们注意到了巨大的性能改进。大多数问题我都能处理,但我已经到了无能为力的地步,想知道是否有人有优雅的解决方案。

我的问题是我命名了 colClasses 但输入没有 header(这是一个 grep 函数),这里有一个愚蠢的例子来说明:

males.students <- read.csv(pipe("grep Male students.csv"), 
                           col.names=c("id", "name", "gender"), 
                           colClasses=(id="numeric"))

现在害怕我仍然想要命名的 colClasses 但我没有 col 名称所以只使用

males.students <- fread("grep Male students.csv"), 
                        colClasses=(id="numeric"))

失败

Column name 'id' in colClasses[[1]] not found

我该如何解决?是否有计划添加 col.names?

在命令行中添加名称:

fread('echo "id,name,gender"; grep Male students.csv', colClasses = c(id='numeric'))

回答最初的问题,如果问题是 grep 删除了 header,您可以使用 awk 来打印第一行和任何包含 [=18 的行=]:

fread("awk 'NR==1 || /Male/' students.csv"), colClasses=(id="numeric"))

这可能会对仍在使用旧版本 data.table 的人有所帮助。