Я использую data.table :: fread для импорта большого набора данных с 7,5 миллионами строк и 56 столбцами. Я указываю переменные классы для определенных переменных, которые должны быть прочитаны как символ, используя аргумент colClasses. После импорта данные выглядят нормально, а классы столбцов сделаны правильно.
Однако при фильтрации данных возникают проблемы. К сожалению, я не могу построить пример здесь, потому что я не знаю точно, в чем проблема.
Но в основном ошибки возникают, когда я использую двоичные логики c для фильтрации некоторых строк.
Ниже коды показывают ошибку:
Прежде всего, столбец 'id' читается как символ, и str / glimpse / class / mode все подтверждают это. Тогда почему это происходит:
mydata[mydata$id == 01005845, year]
[1] 2015 2014 2013 2012
mydata[mydata$id == "01005845", year]
[1] 2011 2010 2009 2008 2007 2006 2005
Для дальнейшего тестирования я перепроверил класс данных для этих конкретных c наблюдений, которые по-прежнему отображаются в виде символов:
typeof(mydata[mydata$id == 01005845, id])
[1] "character"
glimpse(mydata[mydata$id == 01005845, id])
chr [1:4] "01005845" "01005845" "01005845" "01005845"
mydata[mydata$id == 01005845, id] == 01005845
TRUE TRUE TRUE TRUE
Это не делает никакого смысла для меня, потому что для некоторых других идентификаторов все типы являются символами, и я не получаю этот странный результат.
В целом этот символ - несоответствие целочисленного сравнения портит весь мой анализ. Мои фильтрации не работают должным образом, и выходные данные сильно страдают.
Я ценю вашу помощь. Береги себя :)