【问题标题】:Convert a string into dates using R使用 R 将字符串转换为日期
【发布时间】:2020-07-09 16:42:31
【问题描述】:

我有一列日期写为monthyear,格式为: 11960 - 这将是 1960 年 1 月 121960 - 这将是 1960 年 12 月

我想将此列转换为日-月-年格式,假设每个日期为每月的第一天。

我尝试过(使用一个数字作为示例,而不是 dt$dob)

x

但这给了我 NA,因为我认为它不喜欢一开始的 00

所以我尝试将 01 粘贴到每个值,但这会将其粘贴到末尾(此处为 R noob)。我在想也许将 01 发布到开头,然后使用 sprintf 函数可能仍然有效:

  • 将 01 粘贴到 11960 = 011960 的开头
  • sprintf("%08d%", 011960) 可能会给出 0101960?
  • 然后使用 as.Date 进行转换?

非常感谢您的帮助

【问题讨论】:

    标签: r date


    【解决方案1】:

    我使用 paste0() 代替 sprintf,但它似乎有效。

    > x<-paste0("010",11960)
    > x
    [1] "01011960"
    > as.Date(x , format = "%d%m%Y" )
    [1] "1960-01-01"
    
    
    

    编辑 2 位数的月份,我使用 ifelse() 和 nchar()

    y<-c(11960,11970,11980, 111960,111970,111980)
    x<-ifelse(nchar(y) == 5,paste0("010",y),paste0("01",y))
    
    > x
    [1] "01011960" "01011970" "01011980" "01111960" "01111970" "01111980"
    
    as.Date(x , format = "%d%m%Y" )
    [1] "1960-01-01" "1970-01-01" "1980-01-01" "1960-11-01" "1970-11-01" "1980-11-01"
    
    

    【讨论】:

    • 注意 paste0() 是矢量化的,因此它可以与您的库一起使用
    • 这对于两位数月份的日期如何工作,例如111960,有问题的列有 >1000 个这样的日期
    • 再次感谢您的回答。请问 x
    • "y" 是输入向量,所以函数 paste0 将 "010" 添加到 "y" 中的每个元素
    猜你喜欢
    • 2021-03-14
    • 2015-05-20
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2018-09-21
    • 2015-04-27
    • 2011-11-28
    相关资源
    最近更新 更多