R 列名包含空格和特殊字符时从data.table包中读取?

R 列名包含空格和特殊字符时从data.table包中读取?,r,csv,data.table,special-characters,fread,R,Csv,Data.table,Special Characters,Fread,我有一个csv文件,其中列名包括空格和特殊字符 fread使用引号导入它们-但是我如何才能改变这种行为?一个原因是我有以空格开头的列名,我不知道如何处理它们 任何指示都会有帮助 编辑:一个例子 > packageVersion("data.table") [1] ‘1.8.8’ p2p <- fread("p2p.csv", header = TRUE, stringsAsFactors=FALSE) > head(p2p[,list(Principal remaining

我有一个csv文件,其中列名包括空格和特殊字符

fread
使用引号导入它们-但是我如何才能改变这种行为?一个原因是我有以空格开头的列名,我不知道如何处理它们

任何指示都会有帮助

编辑:一个例子

> packageVersion("data.table")
[1] ‘1.8.8’

p2p <- fread("p2p.csv", header = TRUE, stringsAsFactors=FALSE)

> head(p2p[,list(Principal remaining)])
Error: unexpected symbol in "head(p2p[,list(Principal remaining"

> head(p2p[,list("Principal remaining")])
                    V1
1: Principal remaining

> head(p2p[,list(c("Principal remaining"))])
                    V1
1: Principal remaining

在列名中获取前导空格应该相当困难。不应通过“随意编码”发生。另一方面,我在
fread
代码中没有看到太多的错误检查,因此,在修复此不良行为之前(或功能请求被拒绝),您可以执行以下操作:

setnames(DT, make.names(colnames(DT))) 
另一方面,如果您对
colnames(DT)
将显示带引号的列名这一事实感到困扰,那么只需“克服它”。这就是交互式控制台显示任何字符值的方式


如果您在字符列中有一个数据项,看起来像原始版本中的
“ttt”
,那么导入时它将有前导空格,您需要使用
colnames(dfrm)稍微修改一下的BondedDust版本来处理它,因为setnames函数不与一起使用,所以可以在data.table的fread函数中使用参数check.names=T

p2p <- fread("p2p.csv", header = TRUE, stringsAsFactors=FALSE, check.names=T)

我要试试sub/gsub路线。谢谢。你可能想用这个更新你的答案<代码>警告消息:在名称中,我创建了一个变通方法,即现在使用此函数
clean.names也许我们去掉了
stringr
包,然后它就可以得到答案了。从@matthew dowleYou那里得到一条评论会很有意思。你似乎正在重新设计R基中的
make.names
。如果问题是
make.names
无法按照你的喜好处理名称中的前导或尾随空格,那么只需传递它:
sub(^\\s+\\s+$,“”,colnames(m))
。很好。大卫·阿伦伯格修正了。我很尴尬,我这样做了,并惊讶于错误持续了一年多。
setnames(DT, make.names(colnames(DT))
p2p <- fread("p2p.csv", header = TRUE, stringsAsFactors=FALSE, check.names=T)
default is FALSE. If TRUE then the names of the variables in the data.table 
are checked to ensure that they are syntactically valid variable names. If 
necessary they are adjusted (by make.names) so that they are, and also to 
ensure that there are no duplicates.