使用dplyr将数据框中int类型DOB变量转换为yymmdd格式日期
搞定DOB日期格式转换的问题~
先说说你之前代码为啥没成功:
- 第一个写法
as.Date(as.numeric(DOB)):as.Date()默认会把数值当成从1970年1月1日开始算的天数,这和你手里YYYYMMDD格式的生日数字完全不搭,结果肯定不对。 - 第二个写法的格式参数写错啦:
%M是分钟的意思,你要的月份是%m;%D是月/日/年的简写,也不符合你的输入格式,正确的格式应该是%Y%m%d,对应你手里的“年-月-日”数字串。
正确的实现代码
用dplyr的管道语法来写更清晰,先把数字类型的DOB转成字符,再用as.Date()指定正确的格式:
library(dplyr) # 先还原你的示例数据(方便测试) Customer <- tibble( DOB = c(19660422, 19620329, 19500419, 19630405, 19670327, 19540408), person_age = c(53, 57, 69, 56, 52, 65), Twentile = c(6, 17, 1, 12, 13, 4) ) # 执行转换:Twentile转因子,DOB转日期类型 Customer <- Customer %>% mutate( Twentile = factor(Twentile), DOB = as.Date(as.character(DOB), format = "%Y%m%d") ) # 看看转换后的结果 print(Customer)
要是你需要yymmdd格式的字符串
如果你最终想要的是yymmdd(比如660422)这种格式的字符串,而不是标准日期类型,可以在转换后用format()调整输出格式:
Customer <- Customer %>% mutate( Twentile = factor(Twentile), # 先转成日期类型,再格式化为yymmdd的字符串 DOB_yymmdd = format(as.Date(as.character(DOB), format = "%Y%m%d"), "%y%m%d") )
这样DOB字段是标准日期类型(方便后续做日期计算,比如算年龄差),DOB_yymmdd就是你要的短格式字符串啦。
内容的提问来源于stack exchange,提问作者itos0
相关产品推荐
相关产品推荐

