fread不会在列名前删除空格?

时间:2015-03-17 14:33:37

标签: r data.table

所以我使用fread函数来读取.csv文件。有些标题在它们之前有空格,如下面的标题B,C和E:

headerA, headerB, headerC,headerD, headerE

我使用了有选择性的fread函数来仅读取headerBheaderC。之后,引用任一标题都会给我这个问题:

> foo[,"headerB", with=FALSE] NULL

如果我在标题名称前面添加一个空格,它就会起作用:

> foo[," headerB", with=FALSE] (data shows correctly)

这意味着fread正在解析标题名称前面的空格,作为colNames字符串的一部分。这使得以后很难使用诸如foo$headerB之类的语法。

有没有解决这个问题,而不是在违规列上使用setname(foo, " headerB", "headerB")

使用的实际fread命令是: foo <- fread("data.csv", colClasses=list(NULL=c(1:5,8:14), "POSIXct"=c(5,6)) ) 。我最初将sep留给auto,但使用sep=", "没有帮助。

感谢。

3 个答案:

答案 0 :(得分:2)

data.table允许您拥有任意列名,因此它无法真正知道您的空间何时是故意的以及何时错误地存在。

既然您自己确实知道不应该有什么,那么您可以轻松解决它:

setnames(foo, sub('^ *', '', names(foo)))

答案 1 :(得分:0)

library(stringr)

# your column names
my_vec <- c("headerA"," headerB", "headerC"," headerD", "headerE")

# remove whitespace
str_trim(my_vec, "both")

[1] "headerA" "headerB" "headerC" "headerD" "headerE"

将其应用于您的数据列名称。

答案 2 :(得分:0)

晚了几年的答案,但分享给有需要的人。只需添加

fread(input,...,check.names=T)

这将检查并更正所有列名,以便它们可以被 $

索引