fread 不会在列名前删除空格?
fread does not drop whitespace before column names?
所以我正在使用 fread
函数读取 .csv 文件。有些 header 前面有 space,例如下面的 headers B、C 和 E:
headerA, headerB, headerC,headerD, headerE
我使用选择性 fread
函数只读入 headerB
和 headerC
。之后,引用 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)
这将检查并更正所有列名,以便它们可以被 $
索引
所以我正在使用 fread
函数读取 .csv 文件。有些 header 前面有 space,例如下面的 headers B、C 和 E:
headerA, headerB, headerC,headerD, headerE
我使用选择性 fread
函数只读入 headerB
和 headerC
。之后,引用 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)
这将检查并更正所有列名,以便它们可以被 $
索引