【问题标题】:How to convert two concatenate string vars to %m%Y format如何将两个连接字符串变量转换为 %m%Y 格式
【发布时间】:2018-08-12 18:01:29
【问题描述】:

我创建了一个名为long.oto.yeni$Date 的字符变量。现在我需要将此变量转换为%m/%Y 格式以在ggplot2 中绘制时间序列图。所以我无法使用 zoo 包中的 yearmon() 函数。

但是当我使用as.Date() 函数时,输出创建了NA 值。我怎样才能克服这个问题?

谢谢。

long.oto.yeni$Date <- paste0(long.oto.yeni$Month, "/", long.oto.yeni$Year)
long.oto.yeni$Date <- as.Date(long.oto.yeni$Date, "%m/%Y")

【问题讨论】:

  • "将此变量转换为 %m/%Y 格式",您的意思是转换为 POSIXctDate 类吗? R 中没有类引用Month,它们都引用日期或时间。因此,您还需要提供 day。 (我认为蒂姆的回答可能会对您有所帮助,尽管没有样本数据很难提供具体的帮助。)

标签: r date as.date


【解决方案1】:

除了月份和年份之外,您还需要一个日期组件来使用as.Date 形成日期。您可以任意选择每个日期的月初:

long.oto.yeni$Date <- as.Date(paste0("01-",
                              long.oto.yeni$Month, "-",
                              long.oto.yeni$Year), "%d-%m-%Y")

【讨论】:

  • 好的答案强调我们通常需要 Date 类型,但您在粘贴中使用 - 并在可能需要清理的格式中使用 /
  • @DirkEddelbuettel 不是可能,肯定是错字。总是有助于测试一个人的代码,但又不能总是在这里测试所有内容。
  • 只需使用我的任何时间包中的 anydate() 函数 :)
【解决方案2】:

为了完整起见,一个小注释:您也可以使用zoo 包,但您需要像这样将as.yearmon()as.Date() 组合起来

long.oto.yeni$Date <- paste0(long.oto.yeni$Month, "/", long.oto.yeni$Year)
long.oto.yeni$Date <- as.Date(as.yearmon(long.oto.yeni$Date, "%m/%Y"))

@Dirk Eddelbuettel 提出的另一个解决方案是使用anytime 包:

library("anytime")
long.oto.yeni$Date <- anydate(paste0(long.oto.yeni$Year, "-", long.oto.yeni$Month))

请注意,在这两种方法中,您都将获得当月的第一天,这意味着结果将与@Tim Biegeleisen 的答案相同

【讨论】:

    【解决方案3】:

    我们可以使用"yearmon" 类来避免处理月份中的某一天。将long.oto.yeni 读入动物园对象oto,将其索引转换为"yearmon" 类。然后用autoplot.zoo 绘图。

    library(zoo)
    library(ggplot2)
    
    long.oto.yeni <- data.frame(Month = 1:5, Year = 2000, y = (1:5)^2) # input
    
    to_yearmon <- function(y, m) as.yearmon(paste(y, m, sep = "-"))
    oto <- read.zoo(long.oto.yeni, index = c("Year", "Month"), FUN = to_yearmon)
    
    autoplot(oto) + scale_x_yearmon() + xlab("")
    

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 1970-01-01
      • 2021-03-09
      • 2021-12-22
      • 1970-01-01
      • 2015-05-18
      • 2012-11-05
      • 1970-01-01
      相关资源
      最近更新 更多