在R中格式化日期而不带前导零

Jon*_*aus 12 r date zero-pad

有一种使用的一种方式format的日期对象上的功能,特别是类的一个对象POSIXlt,POSIXct或者Date,与该格式%Y, %m, %d使得前导零从每个那些3个字段的剥离?

例如,我想format(as.Date("1998-09-02"), "%Y, %m, %d")回来1998, 9, 2而不是1998, 09, 02.

G. *_*eck 11

只需删除末尾的前导零:

> gsub(" 0", " ", format(as.Date("1998-09-02"), "%Y, %m, %d"))
[1] "1998, 9, 2"
Run Code Online (Sandbox Code Playgroud)

使用%e获取前导空格而不是前导零.

  • 对我来说奇怪的是,不仅有像'%D'这样的选项,或者除去前导零的任何东西. (12认同)

Lia*_*ang 9

我通过使用{lubridate} 包的year(),month()day()函数发现了一种解决方法。在 的帮助下,很容易做到以下几点:glue::glue()

library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
library(glue)
dt <- "1998-09-02"
glue("{year(dt)}, {month(dt)}, {day(dt)}")
#> 1998, 9, 2
Run Code Online (Sandbox Code Playgroud)

reprex 包( v2.0.0 )于 2021 年 4 月 19 日创建

如果使用 {tidyverse}(@banbh 建议),则str_glue()可以使用:

library(tidyverse)
library(lubridate)
#> 
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#> 
#>     date, intersect, setdiff, union
dt <- "1998-09-02"
str_glue("{year(dt)}, {month(dt)}, {day(dt)}")
#> 1998, 9, 2
Run Code Online (Sandbox Code Playgroud)

reprex 包( v2.0.0 )于 2021 年 4 月 19 日创建

  • 另外,如果您已经加载了“tidyverse”包(或只是“stringr”),那么您可以使用“str_glue()”而不是“glue()”,并避免加载“glue”包。 (2认同)

小智 9

您可以通过对strftime格式字符串进行简单更改来完成此操作。但是,这取决于您的平台(Unix 或 Windows)。

Unix

-要从中删除前导零的每个术语之前插入一个减号 ( ):

format(as.Date("2020-06-02"), "%Y, %-m, %-d")
[1] "2020, 6, 2"
Run Code Online (Sandbox Code Playgroud)

视窗

#在每个所需术语之前插入一个井号 ( ):

format(as.Date("2020-06-02"), "%Y, %#m, %#d")
[1] "2020, 6, 2"
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案的外观,但是,它对我不起作用(在 Windows 上):&gt; format(as.Date("2020-06-02"), "%Y, %m, %d") [1 ] "2020, 06, 02" &gt; 格式(as.Date("2020-06-02"), "%Y, %#m, %#d") [1] "2020, #m, #d" I想知道为什么... (7认同)