月份不应有前导零 R。

5
在R中,format()函数似乎没有明显的选项可以显示没有前导0的月份(以及年份)。有没有其他方法来获得这个结果?解决方案应该允许用户灵活选择是否仅省略日期、月份、年份或任何组合中的0。
示例输入:as.Date("2005-09-02") 示例输出1:2/9/5 示例输出2(仅省略月份0):2/9/05
3个回答

8
你可以尝试这个。
x <- as.Date(c("2005-09-02", "2005-10-20", "2010-10-20"))

gsub("0(\\d)", "\\1", format(x, "%d/%m/%y"))
# [1] "2/9/5"    "20/10/5"  "20/10/10"

但请记住,如果您对来自不同世纪的日期向量执行此操作,稍后查看时可能会使事情变得有些混乱。


2
2005-10-20是什么意思? - G. Grothendieck
@G.Grothendieck - 谢谢,我认为我的编辑应该解决了这个问题。 - Rich Scriven
好的,如果所有前导0都要被去掉,那么它是有效的。但是,如果年份应该保留其零而月份不保留呢:例如输出:# [1] "2/9/05" "20/10/05" "20/10/10" ?? - Andri Signorell
@AndriSignorell - 这不是你的问题所要求的。它要求如何从所有内容中去除前导零,包括年份。 - Rich Scriven
@Richard:例子不够清晰,抱歉。我需要一个灵活的解决方案,可以在月份或年份或两者上都去掉前导零。 - Andri Signorell

2
使用sub的解决方案:
x <- as.Date("2005-09-02")
sub("..0?(.+)-0?(.+)-0?(.+)", "\\3/\\2/\\1", x)
# [1] "2/9/5"

谢谢你的解决方案,这看起来很有前途。我如何访问一个大于9的组?\10不起作用... - Andri Signorell

-4

你可以这样做,但是你需要将它设置为字符格式,因为那个格式不是一个实际的日期格式。

X = "2005-09-02"
date = paste(substr(X,10,10),"/",substr(X,7,7),"/",substr(X,4,4),sep='')

这是不正确的。目标不是每个字段打印一个数字,而是抑制前导的 0 - Matthew Lundberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接