如何摆脱<;U+;FEFF>;在R data.table列名称中?
为了导入大型数据集,我使用了data.table和integer64=“character”选项,因为有些列有非常大的数字,而这些数字在其他情况下被截断,只是标识符如何摆脱<;U+;FEFF>;在R data.table列名称中?,r,data.table,R,Data.table,为了导入大型数据集,我使用了data.table和integer64=“character”选项,因为有些列有非常大的数字,而这些数字在其他情况下被截断,只是标识符 my <- fread("mydata.csv", encoding="UTF-8",integer64 = "character") 但我得到了这个错误: 集合名中的错误(miniDT,“ID_2006_2011”,“ID”):项目为“旧” 在列名中找不到:ID_2006_2011 列名确实存在,因为…: > min
my <- fread("mydata.csv", encoding="UTF-8",integer64 = "character")
但我得到了这个错误:
集合名中的错误(miniDT,“ID_2006_2011”,“ID”):项目为“旧”
在列名中找不到:ID_2006_2011
列名确实存在,因为…:
> miniDT[1,1, with=F]
<U+FEFF>ID_2006_2011
1: 160701000002
>miniDT[1,1,带=F]
ID_2006_2011
1: 160701000002
目前,我将使用数字而不是名称来引用列。我也有同样的问题,并且发现
readLines()
withencoding=“UTF-8-BOM”
实际上并没有删除它。我使用了以下功能来剥离BOM表:
removeBOM <- function(headers){
gsub("\\xef\\xbb\\xbf", "", headers, useBytes = T)
}
removeBOM无需测试的可复制示例。。但在当前的开发中已经修复。但这似乎是在数据上修复的。表1.9.8。我使用的是1.9.7,在我的情况下有什么解决方法吗?我试着只导出数据集的一小部分,但它没有产生错误,我不知道为什么。如果没有要测试的文件,我做不了多少。@Arun我已经将它发送给您使用save()保存的对象。
> 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")
> miniDT[1,1, with=F]
<U+FEFF>ID_2006_2011
1: 160701000002
removeBOM <- function(headers){
gsub("\\xef\\xbb\\xbf", "", headers, useBytes = T)
}