【问题标题】:R - converting Character strings into date with only Year/MonthR - 将字符串转换为只有年/月的日期
【发布时间】:2016-03-14 21:53:09
【问题描述】:

目标:绘制时间序列。

问题:X 轴数据当然被视为一个字符,我无法将字符转换为日期。

new.df <- df %>%
group_by(Month, Year) %>%
summarise(n = n())

new.df <- new.df %>%
unite(Date, Month, Year, sep = "/") %>%
mutate(Total = cumsum(n))

所以,我最终得到一个如下所示的数据框:

Date     n     Group    Total
8/2010   1       1        1
9/2010   414     1       415
etc

我正在尝试将 Date 列转换为 Date 格式。该列是一个字符类。所以,我试着做

new.df$Date <- as.Date(New.Patients$Date, %m/%Y)

但是,当我这样做时,它会将整个 Date 列替换为 NA。

我不确定这是否是因为我的个位数月份日期前面没有 0。我做了 unite() 函数只是因为我认为它可能会使它更容易,但它可能不会。

我最初使用 lubridate 包创建了 Year/Month 变量,但我不确定是否可以将其合并到这里。如果有人可以告诉我如何加分。

我将不胜感激任何帮助或指导。我确定这并不难,我现在只是在放屁。

【问题讨论】:

  • 日期也需要一天。也许试试as.Date(paste("01", New.Patients$Date, sep="/"), "%d/%m/%Y")。或使用lubridate::parse_date_time("8/2010", "mY")。
  • 是的。做到了。我在类似的线程中看到了该解决方案,但我不明白粘贴部分实际修复的是什么(在我自己尝试实现的版本中也没有工作)。我没有意识到日期需要天......所以,通过粘贴“01”,我们基本上只是添加了一个人工日期,对吧?

标签: r date formatting time-series


【解决方案1】:

你可以这样试试:

library(zoo) # for yearmon

new.df$Date <- as.yearmon(New.Patients$Date, format="%m/%Y")

但如果你真的需要它是 as.Date,那么我想你必须按照@lukeA 在评论中的建议来定义日期(例如 01)。

【讨论】:

    【解决方案2】:

    正如 lukeA 在 cmets 中指出的那样,我的问题是 as.Date 函数需要一天在字符串中的某个位置。

    因此,只需将“01”(或者我认为几乎任何其他两位数组合都可以)粘贴到每个日期的前面即可解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 2011-01-15
      • 2021-08-14
      • 2020-06-24
      • 1970-01-01
      • 2022-08-09
      相关资源
      最近更新 更多