【问题标题】:How to convert column values into dates for plotting ggplot in R如何将列值转换为日期以在 R 中绘制 ggplot
【发布时间】:2020-03-29 21:11:32
【问题描述】:

我想转换每个月都有特定日期的列。例如:我转换了每个月都有缩写的 col,以匹配收集的特定日期数据。参考如下:

updated_df_2018$End_Date <- ifelse(updated_df_2018$Month=="Oct", "10/24/2017",
                                   ifelse(updated_df_2018$Month=="Nov", "11/28/2017",
                                          ifelse(updated_df_2018$Month=="Dec", "12/26/2017",
                                                 ifelse(updated_df_2018$Month=="Jan", "1/23/2018",
                                                        ifelse(updated_df_2018$Month=="Feb", "2/20/2018",
                                                               ifelse(updated_df_2018$Month=="Mar", "3/27/2018",
                                                                      ifelse(updated_df_2018$Month=="Apr", "4/24/2018",
                                                                             ifelse(updated_df_2018$Month=="May", "5/29/2018",
                                                                                    ifelse(updated_df_2018$Month=="Jun", "6/26/2018",
                                                                                           ifelse(updated_df_2018$Month=="Jul", "7/24/2018",
                                                                                                  ifelse(updated_df_2018$Month=="Aug", "8/28/2018",
                                                                                                         ifelse(updated_df_2018$Month=="Sep", "9/25/2018",
                                                                                                                NA  )))))))))))) # all other values map to NA

如您所见,现在每个月都有一个包含原始日期(月/日/年)的新列。然而,当我绘制 - 并将这个 col 作为我的 x 轴 - 每个月都是独立的而不是连续的。当我使用 as.Date(col, "%d/m/y%") 它转换但移动日期为 2020 年并更改顺序。

任何帮助都会有帮助 - 想绘制两年(2017/18 至 2018/19)期间每栋建筑的整体销售额变化。

谢谢!!

【问题讨论】:

    标签: r dataframe ggplot2 dplyr


    【解决方案1】:

    我们可以从lubridate使用mdy

    library(lubridate)
    library(dplyr)
    updated_df_2018 %>%
             mutate(End_Date = mdy(End_Date))
    

    anydate

    library(anytime)
    updated_df_2018 %>%
            mutate(End_Date = anydate(End_Date))
    

    【讨论】:

      【解决方案2】:

      End_Date 转换为实际日期值

      updated_df_2018$End_Date <- as.Date(updated_df_2018$End_Date, "%m/%d/%Y")
      

      然后您可以将此列用于绘图目的。

      如果您想手动更新 x 轴,请查看 ?scale_x_date

      【讨论】:

      • 我使用了您的命令,但无论出于何种原因,它都会将我的日期转换为 2020..
      • @Dinho 你能分享dput(head(updated_df_2018$End_Date))吗?
      • 结构(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1/23/2018", "10/24/2017", "11/28 /2017”、“12/26/2017”、“2/20/2018”、“3/27/2018”、“4/24/2018”、“5/29/2018”、“6/26/2018” ", "7/24/2018", "8/28/2018", "9/25/2018"), class= "因素")
      • 如何将日期转换为 2020 ?如果我使用x &lt;- structure(c(2L, 2L, 2L, 2L, 2L, 2L), .Label = c("1/23/2018", "10/24/2017", "11/28/2017", "12/26/2017", "2/20/2018", "3/27/2018", "4/24/2018", "5/29/2018", "6/26/2018", "7/24/2018", "8/28/2018", "9/25/2018"), class = "factor") 然后as.Date(x, "%m/%d/%Y") 它会给我正确的日期。它给你什么输出?
      • 它将年份更改为 2020 - 然后只保留每个值的月、日。因此,当我运行它时,它会将列值变为 2020-10-24、2020-11-28 等。
      猜你喜欢
      • 2021-08-19
      • 2021-01-03
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多