Когда я пытаюсь прочитать ранее сохраненный CSV-файл с помощью data.table функции fread, категориальный порядок моих данных не сохраняется. Форматируется в алфавитном порядке.
Чтобы воспроизвести эту проблему, я создал поддельный набор данных, используя data.table.
dat <- data.table(name = c("Joe", "Bob", "Steve", "Lucy", "Eric", "Marshall","Henry"),
subject = as.factor(c(4,1,2,3,4,3,2)))
Используя функцию setattr, я затем помечаю уровни столбца факторов с именем subject.
setattr(dat$subject,
"levels",
c("Math","Biology","Sport", "ICT"))
Вот так выглядит набор данных.
name subject
1: Joe ICT
2: Bob Math
3: Steve Biology
4: Lucy Sport
5: Eric ICT
6: Marshall Sport
7: Henry Biology
Я изучаю структуру набора данных и порядок уровней в предметном факторе. Столбец subject является фактором, и уровни находятся в том же порядке, в котором я их установил.
str(dat)
Classes ‘data.table’ and 'data.frame': 7 obs. of 2 variables:
$ name : chr "Joe" "Bob" "Steve" "Lucy" ...
$ subject: Factor w/ 4 levels "Math","Biology",..: 4 1 2 3 4 3 2
- attr(*, ".internal.selfref")=<externalptr>
as.ordered(dat$subject)
Levels: Math < Biology < Sport < ICT
Когда я сохраняю набор данных с помощью fwrite, а затем использую fread, чтобы открыть его, столбец subject становится символом, а уровни упорядочены в алфавитном порядке.
# save the data
fwrite(dat,
file = "dat.csv",
sep = "\t")
# read data
dat2 <- fread("dat.csv")
# check structure
str(dat2)
Classes ‘data.table’ and 'data.frame': 7 obs. of 2 variables:
$ name : chr "Joe" "Bob" "Steve" "Lucy" ...
$ subject: chr "ICT" "Math" "Biology" "Sport" ...
- attr(*, ".internal.selfref")=<externalptr>
# check order of the levels in subject
as.ordered(dat2$subject)
Levels: Biology < ICT < Math < Sport
Ситуация сохраняется, когда я использую аргумент colClasses и объявляю столбец subject в качестве фактора.
Вопрос Почему функция fread (или fwrite) в data.table не сохраняет столбец темы в качестве фактора. И когда это контролируется для использования аргумента colClasses для указания столбца subject в качестве фактора, почему иерархический порядок уровней в столбце subject не сохраняется?
freadили другие функции импорта данных не имеют представления об исходных уровнях фактора. Если вы хотите сохранить атрибуты данных, рассмотрите возможность сохранения их в виде файла .RDS. - person mt1022   schedule 01.10.2020