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

fread does not drop whitespace before column names?

所以我正在使用 fread 函数读取 .csv 文件。有些 header 前面有 space,例如下面的 headers B、C 和 E:

headerA, headerB, headerC,headerD, headerE

我使用选择性 fread 函数只读入 headerBheaderC。之后,引用 header 中的任何一个都会给我这个问题:

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

如果我在 header 名称前添加一个 space,它会起作用:

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

这意味着 fread 正在解析 header 名称前面的 space 作为 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=", " 没有帮助。

谢谢。

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"

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

data.table 允许您使用任意列名,因此它无法真正知道您的空格何时是有意的,何时是错误的。

既然你自己知道什么不应该存在,你就可以很容易地修复它:

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

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

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

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

索引