在R中将数值型日期转换为DD-MMM-YY格式的技术求助
解决R中数值日期转指定格式的问题
嘿,这个问题我熟!先理清楚前提:你要的02-Jan-16格式里,年份是2016、月份是1月对吧?那你的date列数值应该是对应1月的第几天~下面给你两种实用的解决方法,任选其一就行:
方法一:用Base R原生函数(不用额外装包)
先给你构造一份和你示例匹配的测试数据框,方便你直接测试:
# 构造示例数据框 df <- data.frame( NAME = c("Name.1", "Name.2", "Name.2"), date = c(2, 2, 4), modality = c("HA", "H", "H"), stringsAsFactors = FALSE )
然后分两步转换:
- 把数值形式的日期转换成R可识别的
Date类型,这里我们指定年份为2016、月份为1,和你目标格式匹配; - 把
Date类型格式化为你要的dd-mmm-yy样式。
代码如下:
# 第一步:转换为Date类型 df$date_formatted <- as.Date(paste(2016, 1, df$date, sep = "-")) # 第二步:格式化为目标样式 df$date_formatted <- format(df$date_formatted, "%d-%b-%y")
执行完后,你的date_formatted列就会显示02-Jan-16、04-Jan-16这样的结果啦!
方法二:用lubridate包(更简洁直观)
如果你经常处理日期,强烈推荐lubridate包,语法更友好。先安装并加载包:
install.packages("lubridate") # 首次使用需要安装 library(lubridate)
然后一行代码就能完成转换+格式化:
df$date_formatted <- format(make_date(2016, 1, df$date), "%d-%b-%y")
额外说明:
- 如果你
date列的数值其实是当年的第N天(比如2代表2016年第2天,也就是1月2日),那可以用这个更通用的写法:# Base R写法 df$date_formatted <- format(as.Date(df$date, origin = "2015-12-31"), "%d-%b-%y") # lubridate写法 df$date_formatted <- format(ymd("2016-01-01") + days(df$date - 1), "%d-%b-%y") - 格式符解释:
%d是两位日期(01/02/...),%b是缩写月份(Jan/Feb/...),%y是两位年份(16/17/...)。如果需要全称月份可以用%B(January/February/...),四位年份用%Y(2016/2017/...)。
内容的提问来源于stack exchange,提问作者user8722680
相关产品推荐
相关产品推荐

