【问题标题】:Converting interval dates in factor class to date class?将因子类中的间隔日期转换为日期类?
【发布时间】:2014-02-11 03:28:26
【问题描述】:

我有一个从这个website 获得的数据集。在这个数据集中有一个“日期”列,它的类是因子。我需要将它们转换为日期类。所以我的问题是;

  1. 我应该如何将其转换为日期?
  2. 如何处理诸如“1/2011-12/2012”之类的间隔日期
  3. 只有月份和年份值?所以这会导致一些问题,我该如何解决这个问题?

【问题讨论】:

    标签: r


    【解决方案1】:

    不确定这是否是您想要的,但这是一种方法:

    df <- read.csv("map.csv")
    dates <- t(data.frame(strsplit(as.character(df$Date),"-")))
    df$dateFrom <- as.Date(paste0("01/",dates[,1]), format="%d/%m/%Y")
    df$dateTo   <- as.Date(paste0("01/",dates[,2]), format="%d/%m/%Y")
    head(df[,c("Date","dateFrom","dateTo")])
    #             Date   dateFrom     dateTo
    # 1 1/2010-12/2010 2010-01-01 2010-12-01
    # 2 1/2011-12/2011 2011-01-01 2011-12-01
    # 3 1/2012-11/2012 2012-01-01 2012-11-01
    # 4        12/2012 2012-12-01 2012-12-01
    # 5 1/2013-12/2013 2013-01-01 2013-12-01
    # 6        12/2012 2012-12-01 2012-12-01
    

    这会将您的“Date”字段解析为“from”和“to”日期,并将它们作为额外的列添加到df。由于as.Date(...) 确实需要一个完整的日期(仅靠月份和年份是不够的),所以我在所有情况下都将日期强制为每月的第一天。

    【讨论】:

    • 非常感谢您的帮助。当我输入这段代码时,几乎一切都很好。但是,某些日期格式就像 0010-05-01 而不是 2010-05-01。你有什么想法来解决这个问题吗?提前谢谢你。
    • 不确定你的意思。我下载了同一个文件Added Source information for vaccine map.csv,然后运行了这段代码。有两行“日期”仅为一年。这些解析为NA。其他一切都正确解析。 range(df$dateFrom,na.rm=T) 产生:"2008-01-01" "2014-02-01"range(df$dateTo,na.rm=T) 产生 "2008-09-01" "2014-02-01"
    • 我现在得到了同样的结果。实际上,我还有一个问题。我在这个项目中的目标是按时间(日期)绘制爆发的传播。你能给我一些建议吗?我怎样才能像我所说的那样为每种疾病创建一个情节?非常感谢您的回复。
    • 顺便问一下,你能检查一下第 142 行吗(加拿大的腮腺炎(惠斯勒)。dateFrom 和 dateTo 是相同的,即 2011-04-01?所以这里肯定有错误。但我不明白.
    • 查看该行的原始日期:它是 4/2011,因此起始日期和结束日期相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2014-06-14
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多