【问题标题】:Convert Factor to Date with Years of Two Digits将因子转换为两位数年份的日期
【发布时间】:2019-12-27 00:39:30
【问题描述】:

我需要你的帮助: 我在 CSV 文件中有一个出生日期列,类型是“因素”。我想将类型转换为“日期”。

列数据:

8-Dec-09  
8-Dec-12
8-Dec-14 
8-Dec-42 
8-Dec-49 
8-Dec-53 
8-Dec-61  
8-Dec-62

前三行的年份分别为:2009、2012、2014。

其余年份分别为:1942、1949、1953、1961 和 1962

当使用as.Date,并尝试显示该列时,我收到消息:

"."

第一次尝试:

Patient$DATE_OF_BIRTH <- as.Date(Patient$DATE_OF_BIRTH, format = "%d/%m/%Y %H:%M")

第二次尝试:

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

第三次尝试:

Patient$DATE_OF_BIRTH <- as.Date(Patient$DATE_OF_BIRTH, format = "%d-%m-%Y %H:%M")

第四次尝试:

Patient$DATE_OF_BIRTH <- as.Date(Patient$DATE_OF_BIRTH, format = "%d-%m-%Y")

在之前的尝试中,不幸的是我得到的输出是:

""

我期望输出:

2009 年 12 月 8 日 2009 年 12 月 8 日或 2009 年 12 月 8 日和

8-Dec-62 的输出为 8-Dec-1962 或 8/Dec/1962 或

2009 年 12 月 8 日和 62 年 12 月 8 日保持不变,但列类型为日期而不是因子。

如果您建议在不使用 R 包的情况下进行转换,我将非常感谢,因为我在难以安装包的环境中工作。但如果没有办法,请提出任何可行的建议。

【问题讨论】:

  • 两位数年份是%y,而不是%Y。有关百分比代码,请参阅 ?strptime。
  • 您需要逐字匹配format 参数中的日期。 %x 匹配日期的数字和单词,其他所有内容都应由您匹配。显然,如果你的约会中没有时间,你应该放弃%H:%M。
  • @G.Grothendieck 我尝试使用 %y 它给了我
  • @roman-luštrik 我删除了 %H:%M 但没有任何改变

标签: r date type-conversion as.date


【解决方案1】:

tidyverse 的 lubridate 库可能会有所帮助,特别是 dmy() 函数(将日-月-年字符串转换为日期):

library(tidyverse)
library(lubridate)

example <- c("8-Dec-09")
example_asdate <- dmy(example)
head(example_asdate)
#[1] "2009-12-08" 

Patient <- Patient %>% mutate(DATE_OF_BIRTH = dmy(DATE_OF_BIRTH))

【讨论】:

    【解决方案2】:

    这对我有用,但请记住,这是特定于语言环境的。如果它不适合您,您可能需要更改转换的语言环境。

    > as.Date("8-Dec-09", format = "%d-%b-%y")
    [1] "2009-12-08"
    

    如果您查看文档 (?strptime),您会注意到有关 %y 的内容:

    没有世纪的年份 (00–99)。输入时,值 00 到 68 是前缀 20 和 69 到 99 到 19 – 这是 2004 年规定的行为 和 2008 POSIX 标准,但他们也说“预计在 从 2 位数年份推断的默认世纪的未来版本将 改变”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 2015-07-27
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2022-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多