如何摆脱R data.table列名中的<u + feff>?

时间:2016-07-19 12:51:38

标签: r data.table

为了导入一个大型数据集,我使用了带有选项integer64 =“character”的data.table,因为有些列的数字很大,否则会被截断,而且只是标识符。

my <- fread("mydata.csv", encoding="UTF-8",integer64 = "character")

启用该选项后,这些列将作为字符正确导入,但现在我遇到了问题,他们的列名已自动修改为以这些字符开头

<U+FEFF>

例如,第一列现在称为

<U+FEFF>ID_2006_2011

现在的问题是我无法使用这些名称,例如:

> miniDT[1,"<U+FEFF>ID_2006_2011", with=F]
Error in `[.data.table`(miniDT, 1, "<U+FEFF>ID_2006_2011", with = F) : 
  column(s) not found: <U+FEFF>ID_2006_2011
> miniDT[1,"ID_2006_2011", with=F]
Error in `[.data.table`(miniDT, 1, "ID_2006_2011", with = F) : 
  column(s) not found: ID_2006_2011

我如何与他们合作? 如何将它们更改为更简单的东西? 我试过

setnames(miniDT, "ID_2006_2011", "ID")

但是我收到了这个错误:

  

setnames中的错误(miniDT,“ID_2006_2011”,“ID”):'old'的项目   在列名称中找不到:ID_2006_2011

列名实际上是因为......:

> miniDT[1,1, with=F]
   <U+FEFF>ID_2006_2011
1:         160701000002

目前我会使用数字代替名称来引用列。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,发现带有 readLines()encoding="UTF-8-BOM" 实际上并没有删除它。我使用以下函数去除 BOM:

removeBOM <- function(headers){
  gsub("\\xef\\xbb\\xbf", "", headers, useBytes = T)
}