【问题标题】:date format without leading zeros - R [duplicate]不带前导零的日期格式 - R [重复]
【发布时间】:2019-05-14 22:11:50
【问题描述】:

我在字符向量中有日期,我正在寻找一种方法将其转换为带有as.Date() 的日期格式:

vector <- c("15/1/2019", "5/5/2019")

但是,as.Date(vector, format="%d/%m/%Y") 接收以零开头的输入字符。我找到了很多解决方案:

Input: "15/01/2019"
Output: "15/1/2019"

但是,我需要完全相反才能使as.Date() 工作:

Input: "15/1/2019" "5/5/2019"
Output: "15/01/2019" "05/05/2019"

format 参数是否有任何特定格式?或者我必须使用substr() 解决方案?

【问题讨论】:

  • 我进行了编辑,以便引用 vector 中的日期并匹配输出示例。
  • vector 也是一个 R 函数,所以不是最大的变量名)
  • 我很困惑。从 2019 年 1 月 1 日的输入生成 2019 年 15 月 1 日的“大量解决方案”是什么?
  • 顺便说一句为什么要投反对票?我在这个帖子中找不到任何解决方案

标签: r date data-manipulation


【解决方案1】:

我们可以使用strftime

strftime(as.Date(inp, format="%d/%m/%Y"), format="%d/%m/%Y")
# [1] "15/01/2019" "05/05/2019"

数据

inp <- c("15/1/2019", "5/5/2019")

【讨论】:

  • 没什么神奇的:as.Date 读取字符并转换为日期,strftime 创建所需格式的输出。诀窍是正确指定两者。见?strftime
  • 谢谢!。顺便说一句,我必须添加%&gt;% as.Date(),因为你的结果类是字符。
  • 根据您的最后一条评论,我认为您将 Date 对象的外观与格式化日期字符串的外观混淆了。
【解决方案2】:

我不确定我是否理解这个问题。 as.Date() 在您的输入中按预期工作:

vector <- c("15/1/2019", "5/5/2019")
dates <- as.Date(vector, format = "%d/%m/%Y")

dates
[1] "2019-01-15" "2019-05-05"

要获得所需的输出,请使用format

format(dates, "%d/%m/%Y")
[1] "15/01/2019" "05/05/2019"

编辑

从您的 cmets 来看,很明显您混淆了两个不同的东西。

要使用as.Date() 获取日期对象,您需要告诉它输入日期字符串的格式。你有“日月年”。所以你把它提供给as.Date()

as.Date(vector, format = "%d/%m/%Y")

结果将始终在控制台中显示为年-月-日 (YYYY-MM-DD)。

以选定的格式显示日期是不同的。现在我们将 Date 对象格式化回字符串:

format(dates, "%d/%m/%Y")

总结:正确转换的 Date 对象将始终在控制台中显示为 YYYY-MM-DD。将该对象格式化为字符串是不同的操作。

我希望这可以解决问题。

【讨论】:

  • 它不适合我。它给了我[1] "0015-01-20" "0005-05-20"
  • 你得到这个结果是因为你省略了format 参数到as.Date()
猜你喜欢
  • 1970-01-01
  • 2022-12-10
  • 1970-01-01
  • 2011-10-07
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
相关资源
最近更新 更多