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

Ric*_*ico 9 csv r special-characters fread data.table

我有一个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
Run Code Online (Sandbox Code Playgroud)

当然,我期待/想要的是没有空格的列名产生的结果:

> head(p2p[,list(Principal)])
   Principal
1:      1000
2:      1000
3:      1000
4:      2000
5:      1000
6:      4130
Run Code Online (Sandbox Code Playgroud)

dom*_*nic 9

一点点修改过的BondedDust版本,因为setnames函数不与< - sign一起使用:

setnames(DT, make.names(colnames(DT))
Run Code Online (Sandbox Code Playgroud)


42-*_*42- 6

在列名中获取前导空格应该相当困难.不应该通过"随意编码"来实现.另一方面,我没有看到fread代码中的错误检查,所以可能直到修复了这种不良行为(或功能请求被拒绝),你可以这样做:

setnames(DT, make.names(colnames(DT))) 
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您colnames(DT)将显示带有引号的列名称,那么只会"克服它".这就是交互式控制台将显示任何字符值的方式.

如果您在字符列中有一个看起来像" ttt"原始数据项的数据项,那么在导入时它将具有前导空格,并且您需要使用各种包colnames(dfrm) <- sub("^\\s+", "", colnames(dfrm))中的多个trim函数之一(例如'gdata')来处理它