为了导入一个大型数据集,我使用了带有选项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
目前我会使用数字代替名称来引用列。
答案 0 :(得分:0)
我遇到了同样的问题,发现带有 readLines()
的 encoding="UTF-8-BOM"
实际上并没有删除它。我使用以下函数去除 BOM:
removeBOM <- function(headers){
gsub("\\xef\\xbb\\xbf", "", headers, useBytes = T)
}