我正在构建一个闪亮的应用程序,该应用程序除了用户界面的挑剔的美学方面之外,都可以正常工作。我试图选择要显示的季节,但要以正确的顺序进行,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忽略字母顺序,而不必明确指出每个因子水平及其出现的顺序?
答案 0 :(得分:1)
您可以操纵因子水平而不是因子本身
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))