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)
一点点修改过的BondedDust版本,因为setnames函数不与< - sign一起使用:
setnames(DT, make.names(colnames(DT))
Run Code Online (Sandbox Code Playgroud)
在列名中获取前导空格应该相当困难.不应该通过"随意编码"来实现.另一方面,我没有看到fread
代码中的错误检查,所以可能直到修复了这种不良行为(或功能请求被拒绝),你可以这样做:
setnames(DT, make.names(colnames(DT)))
Run Code Online (Sandbox Code Playgroud)
另一方面,如果您colnames(DT)
将显示带有引号的列名称,那么只会"克服它".这就是交互式控制台将显示任何字符值的方式.
如果您在字符列中有一个看起来像" ttt"
原始数据项的数据项,那么在导入时它将具有前导空格,并且您需要使用各种包colnames(dfrm) <- sub("^\\s+", "", colnames(dfrm))
中的多个trim
函数之一(例如'gdata')来处理它