R语言中无法将年月格式字符转换为日期类型的问题排查
问题原因与解决方法
问题出在哪?
第一种方法
as.Date(blah$dates, format="%Y/%m/01")逻辑错误:format参数是用来匹配输入字符串的格式,不是用来补全日期的。你的输入是"2014/09",格式是"%Y/%m",但as.Date()要求输入必须包含完整的年月日信息,直接这么写会解析失败。第二种方法的
paste()默认添加空格:paste(blah$dates,"/01")会生成"2014/09 /01"(注意09和/01之间有空格),而你指定的format="%Y/%m/%d"要求字符串是"YYYY/MM/DD"无空格的格式,格式不匹配导致全NA。
正确的解决方式
方法1:修正paste()的分隔符
用sep=""去掉默认空格,确保拼接后的字符串格式正确:
dates <- c("2014/09", "2015/09") blah <- as.data.frame(dates) blah$dates <- as.Date(paste(blah$dates, "01", sep="/"), format="%Y/%m/%d") blah # dates # 1 2014-09-01 # 2 2015-09-01
方法2:用lubridate包简化操作
如果安装了lubridate包,ym()函数可以直接识别年月格式,并自动补全当月第一天:
library(lubridate) dates <- c("2014/09", "2015/09") blah <- as.data.frame(dates) blah$dates <- ym(blah$dates) blah # dates # 1 2014-09-01 # 2 2015-09-01
内容的提问来源于stack exchange,提问作者jerH
相关产品推荐
相关产品推荐

