所以我使用fread
函数来读取.csv文件。有些标题在它们之前有空格,如下面的标题B,C和E:
headerA, headerB, headerC,headerD, headerE
我使用了有选择性的fread
函数来仅读取headerB
和headerC
。之后,引用任一标题都会给我这个问题:
> 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=", "
没有帮助。
感谢。
答案 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)
这将检查并更正所有列名,以便它们可以被 $
索引