我可以按时间顺序将日期排序为 R 中的字符吗?

Can I chronologically order dates as characters in R?

我有 .csv 格式的数据。第一列是日期,第二列是天数。我想绘制天数与日期。 (参见 here

在我的 .csv 中,日期按年份顺序排列。在 RStudio 中,初始图按月份的时间顺序排列。

install.packages("tidyverse")
library(tidyverse)
#load my spreadsheet
openingData <- read_csv("daysPriorToOpening.csv")
ggplot(data = openingData) +
    geom_col(mapping = aes(x = dateOpened, y = daysPrior) +
    labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")

这将创建 this 输出,其中 运行 按月数排列。我喜欢 appea运行ce,只是不喜欢顺序。有人建议我尝试使用 as.Date()

openingData$dateOpened <- as.Date(openingData$dateOpened, format = "%m/%d/%Y")

然后我 运行 再次将代码绘制成图表,它按时间顺序绘制,但现在有很大的差距。参见 here。日期没有像第一张图片中那样标记; reader 必须猜测确切的日期。

我对不同外观的猜测运行ce 是,在第一种情况下,日期是字符和离散的。在第二种情况下,使用 as.Date() 将它们更改为日期并且它们变得连续。有没有办法,

  1. 保持第一张图的显示,但按年份排序,或者
  2. 如第二张图所示显示,但要消除间隙用相应的日期标记列?

您需要将日期转换为因子,并根据它们代表的日期对因子水平进行排序。这涉及转换为日期、排序,然后再次转换回来。

dates <- as.Date(openingData$dateOpened, format = "%m/%d/%y")
levs  <- strftime(sort(dates), format = "%m/%d/%y")
openingData$dateOpened <- factor(strftime(dates, format = "%m/%d/%y"), levs)
                                 

ggplot(data = openingData) +
    geom_col(mapping = aes(x = dateOpened, y = daysPrior)) +
    labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")

openingData %>% 
  mutate(dateOpened = as.Date(dateOpened,"%m/%d/%y")) %>% 
  arrange(dateOpened) %>% 
  mutate(id = factor(row_number(),labels = dateOpened)) %>% 
  ggplot() + 
  geom_col(mapping = aes(x = id, y = daysPrior))+
  labs(x = "Date Opened", y = "Days prior to opening at or above 11.0")