我有一个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
我期待/想要的当然是没有空格的列名称:
> head(p2p[,list(Principal)])
Principal
1: 1000
2: 1000
3: 1000
4: 2000
5: 1000
6: 4130
答案 0 :(得分:9)
稍微修改了 BondedDust 版本,因为setnames函数不与&lt; - sign:
一起使用setnames(DT, make.names(colnames(DT))
答案 1 :(得分:5)
在列名中获取前导空格应该相当困难。不应该通过“随意编码”来实现。另一方面,我没有在fread
代码中看到非常多的错误检查,所以可能直到修复了这种不良行为(或功能请求被拒绝),你可以这样做:
setnames(DT, make.names(colnames(DT)))
另一方面,如果colnames(DT)
将显示带引号的列名,那么你会感到困扰,那么只需“克服它”。这就是交互式控制台将显示任何字符值的方式。
如果原始字符列中的数据项看起来像" ttt"
,则导入时会有前导空格,您需要使用colnames(dfrm) <- sub("^\\s+", "", colnames(dfrm))
或其中一个处理它各种包中的几个trim
函数(例如'gdata')
答案 2 :(得分:0)
您可以在data.table
的fread函数中使用参数check.names = T.p2p <- fread("p2p.csv", header = TRUE, stringsAsFactors=FALSE, check.names=T)
它在后台使用make.names函数
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.