R语言仅按年份格式化Date时为何补12日?如何改为当月1日?
R日期格式化问题解析与解决方案
为什么会自动补当月12日?
其实这不是R故意固定补12日,而是取决于你运行代码当天的系统日期!当你用as.Date(as.character(2002:2013), format='%Y')时,只提供了年份信息,缺失了月和日。R的as.Date()函数在遇到不完整的日期字符串时,会自动用当前会话的系统日期的月和日来填充缺失部分。
比如你运行代码那天是1月12日,所以就自动补了-01-12;如果是在5月20日运行,结果就会变成2002-05-20这类日期。这是R解析不完整日期时的默认行为哦。
如何返回当月1日的日期?
除了你提到的paste(2002, '01', '01', sep='-')方法,还有几种更优雅的方案:
- 用基础包的
ISOdate()函数:直接指定年、月、日,再转成Date类型,代码更直观:as.Date(ISOdate(2002:2013, 1, 1)) - 用
lubridate包的便捷函数(推荐,处理日期更省心):
先安装并加载lubridate包,然后可以用make_date()直接生成:
或者用library(lubridate) make_date(2002:2013, 1, 1)ymd()拼接字符串:ymd(paste(2002:2013, "01", "01", sep = "-")) - 修改解析后的日期:如果已经得到了带默认日的Date对象,也可以直接把日改成1:
dates <- as.Date(as.character(2002:2013), format='%Y') # 用基础包方法修改 dates <- as.Date(paste(format(dates, "%Y"), format(dates, "%m"), "01", sep = "-"))
内容的提问来源于stack exchange,提问作者AdamO
相关产品推荐
相关产品推荐

