динамическое обновление упорядоченных факторов с двумя числовыми компонентами R - PullRequest
0 голосов
/ 08 июля 2019

Я создаю блестящее приложение, которое работает прекрасно, за исключением придирчивых эстетических аспектов пользовательского интерфейса. Я пытаюсь выбрать сезон для отображения, но в правильном порядке, и R настаивает на алфавитном порядке строк, а не придерживаться временного порядка. Возможно, было бы проще использовать данные в форме дат, но я чувствую, что все равно столкнулся бы с тем, что не должно происходить. Данные, которые обозначают времена года, представляют собой символьную строку чисел, первые четыре из которых представляют год, а две последние цифры представляют сезон, где «20» обозначает весну, «30» обозначает лето, а «40» обозначает падение. Вы можете сгенерировать значения используя:

seasons<-as.factor(sapply(2000:2019,paste0,c(20,30,40)))

Вы можете создать новый объект значения строки символов сезона с помощью:

season.string<-factor(paste0(ifelse(substr(seasons,5,6)=="20","Spring ",
                                                 ifelse(substr(seasons,5,6)=="30","Summer ","Fall ")),
                      substr(seasons,1,4)),ordered = T)

Проблема заключается в том, что он переупорядочивается, чтобы указать, что осень 2001 года предшествует весне 2000 года. Я хочу настроить это приложение для запуска без заминок, когда в данные добавляются новые сезоны, и я не хочу, чтобы заходите и явно вызывайте новый уровень факторов каждый новый сезон, который добавляется к данным, чтобы приложение выглядело красиво. Есть ли способ заставить R игнорировать алфавитизацию без явного вызова каждого факторного уровня и порядка их поступления?

1 Ответ

1 голос
/ 08 июля 2019

Вы можете манипулировать уровнями факторов вместо самого фактора

seasons <- factor(sapply(2000:2019, paste0, c(20, 30, 40)), ordered = TRUE)

levels(seasons) <- 
  paste0(ifelse(substr(levels(seasons), 5, 6) == "20", "Spring ", 
                ifelse(substr(levels(seasons), 5, 6) == "30", "Summer ", "Fall ")),
         substr(levels(seasons), 1, 4))

или вы можете указать уровни, которые вы хотели бы иметь для вас, как этот фактор

season.string <- 
  paste0(ifelse(substr(seasons, 5, 6) == "20", "Spring ", 
                ifelse(substr(seasons, 5, 6) == "30", "Summer ", "Fall ")),
         substr(seasons, 1, 4))

factor(season.string, ordered = T, levels = unique(season.string))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...