是否有一种方法可以在日期对象上使用format函数,特别是POSIXlt、POSIXct或Date类的对象,格式为%Y, %m, %d,以便从这3个字段中的每一个字段中去掉前导零?例如,我希望format(as.Date("1998-09-02"), "%Y, %m, %d")返回1998, 9, 2,而不是1998, 09, 02。
format
POSIXlt
POSIXct
Date
%Y, %m, %d
format(as.Date("1998-09-02"), "%Y, %m, %d")
1998, 9, 2
1998, 09, 02
cx6n0qe31#
只需删除末尾的前导零:
gsub(" 0", " ", format(as.Date("1998-09-02"), "%Y, %m, %d")) ## [1] "1998, 9, 2"
使用%e获取前导空格而不是前导零。
pb3skfrl2#
您可以通过简单地更改strftime字符串来实现这一点,但这取决于您的平台(Unix或Windows)。Unix在要删除前导零的每个术语前插入减号(-):
strftime
-
format(as.Date("2020-06-02"), "%Y, %-m, %-d") [1] "2020, 6, 2"
在每个所需术语前插入磅号(#):
#
format(as.Date("2020-06-02"), "%Y, %#m, %#d") [1] "2020, 6, 2"
ycl3bljg3#
通过使用{lubridate} package的year()、month()和day()函数,我发现了一个变通方法。在glue::glue()的帮助下,很容易做到以下操作:
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
由reprex package(v2.0.0)于2021年4月19日创建2023年3月2日编辑:在{tidyverse} 2.0.0之后,{lubridate}是在连接{tidyverse}之后连接的,因此现在不需要连接{lubridate}:
library(tidyverse) dt <- "1998-09-02" str_glue("{year(dt)}, {month(dt)}, {day(dt)}") #> 1998, 9, 2
创建于2023年3月2日,使用reprex v2.0.2如果使用{tidyverse}(由@banbh建议),则可以使用str_glue():
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
由reprex package(v2.0.0)于2021年4月19日创建
sqxo8psd4#
一个更通用的解决方案是使用gsub,从%m或%d生成的日期或月份数字中删除前导零。这将删除任何前面没有数字的零:
gsub("(\\D)0", "\\1", format(as.Date("1998-09-02"), "%Y, %m, %d"))
4条答案
按热度按时间cx6n0qe31#
只需删除末尾的前导零:
使用%e获取前导空格而不是前导零。
pb3skfrl2#
您可以通过简单地更改
strftime
字符串来实现这一点,但这取决于您的平台(Unix或Windows)。Unix
在要删除前导零的每个术语前插入减号(
-
):Windows
在每个所需术语前插入磅号(
#
):ycl3bljg3#
通过使用{lubridate} package的
year()
、month()
和day()
函数,我发现了一个变通方法。在glue::glue()
的帮助下,很容易做到以下操作:由reprex package(v2.0.0)于2021年4月19日创建
2023年3月2日编辑:
在{tidyverse} 2.0.0之后,{lubridate}是在连接{tidyverse}之后连接的,因此现在不需要连接{lubridate}:
创建于2023年3月2日,使用reprex v2.0.2
如果使用{tidyverse}(由@banbh建议),则可以使用
str_glue()
:由reprex package(v2.0.0)于2021年4月19日创建
sqxo8psd4#
一个更通用的解决方案是使用gsub,从%m或%d生成的日期或月份数字中删除前导零。这将删除任何前面没有数字的零: