R data.table fread使用不带标题的命名ColClass(例如,没有col.names?) 更新(2016年6月)

R data.table fread使用不带标题的命名ColClass(例如,没有col.names?) 更新(2016年6月),r,data.table,fread,R,Data.table,Fread,col.names被添加到data.table 1.9.6中,所以问题结束了,每个人都非常高兴:)我想我现在可以将我所有的read.csv调用转换为fread调用,而不用担心破坏 原始问题 使用数据。表1.9.4 我正在将read.csv调用导入fread,因为我们已经注意到了巨大的性能改进。大多数问题我都能处理,但我已经到了一个不知所措的地步,不知道是否有人有一个简单的解决方案 我的问题是我已经命名了colClasses,但是输入没有头(它是一个grep函数),下面是一个愚蠢的例子: male

col.names被添加到data.table 1.9.6中,所以问题结束了,每个人都非常高兴:)我想我现在可以将我所有的read.csv调用转换为fread调用,而不用担心破坏

原始问题 使用数据。表1.9.4

我正在将read.csv调用导入fread,因为我们已经注意到了巨大的性能改进。大多数问题我都能处理,但我已经到了一个不知所措的地步,不知道是否有人有一个简单的解决方案

我的问题是我已经命名了colClasses,但是输入没有头(它是一个grep函数),下面是一个愚蠢的例子:

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

males.students在命令行中添加名称:

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

回答原始问题时,如果问题是
grep
删除了标题,您可以使用
awk
来打印第一行和包含“Male”的任何行:


这可能有助于仍然使用旧版本的
data.table

的用户,因为您知道它是第一列,所以可以使用列号进行此操作
colClasses=list(numeric=1))
。尝试使用
select
参数作为well@shadow这显然是一个非常简单的例子-真正的csv有40列,我为其中19列设置了ColClass,我真的认为使用列号是不合理的,你希望你的系统是健壮的,并且允许更改,而不让你的数据神秘地更改类型,而不知道为什么。只是好奇,为什么你需要设置19列类?他们是什么课?如果数据是干净的,则应正确读取。@RichardScriven select仅允许您选择要通过名称/索引返回的列,而不是更改它们的名称。我需要设置colClasses,因为有些列可能看起来像数字,但实际上只有字符才有意义,例如,在金融交易中,交换订单ID“00000000 123”和“00000 123”是不同的订单,它们只表示为字符,而不是数字。这种攻击不会扩展到大文件。@smci-huh,有什么可以扩展的?在现有的
grep
之上添加
echo
没有开销
echo+grep
正在使用命令行创建一个临时文件,该文件可能非常大,并会耗尽内存。如果students.csv有10M行怎么办?@smci OP已经在使用
grep
在读取原始文件之前过滤掉它,因此,
echo
不会增加开销,也不会增加内存损失。如果你不能读取灰色文件,你当然不能读取原始文件。
fread('echo "id,name,gender"; grep Male students.csv', colClasses = c(id='numeric'))
fread("awk 'NR==1 || /Male/' students.csv"), colClasses=(id="numeric"))