R语言中日期格式转换后列值为空问题求助
解决R语言日期格式转换的问题
我来帮你捋捋问题出在哪哈~你现在的问题核心是搞混了as.Date()里format参数的作用:这个参数是用来告诉R你的输入字符串是什么格式,而不是你想要输出的格式!
你原来的代码里,输入的字符串是"2015-01-01"这种年-月-日的格式,但你给as.Date()传的format="%b %Y"是对应"Jan 2015"这种格式的,R根本没法匹配,自然就返回空值(NA)了。
正确的解决步骤
分两步走就搞定:
- 先把factor类型的日期字符串转换成真正的Date类型,这时候要用输入对应的格式
"%Y-%m-%d" - 再把Date类型的数据格式化成你想要的
"月 年"字符串格式,这时候用format()函数搭配"%b %Y"
具体代码实现
首先看你的原数据:
data <- data.frame(year_month = c("2015-01-01", "2015-02-01", "2015-03-01", "2015-04-01", "2015-05-01", "2015-06-01")) class(data$year_month) # 返回 [1] "factor"
方案一:分步转换
# 第一步:将factor转为Date类型(匹配输入格式) data$date_col <- as.Date(data$year_month, format = "%Y-%m-%d") # 第二步:将Date格式转为目标字符串格式 data$year_month1 <- format(data$date_col, "%b %Y")
方案二:合并成一行代码
如果不想多一个中间列,可以直接合并:
data$year_month1 <- format(as.Date(data$year_month, format = "%Y-%m-%d"), "%b %Y")
验证结果
执行完后打印data$year_month1,就能得到你想要的结果:
print(data$year_month1) # 输出: # [1] "Jan 2015" "Feb 2015" "Mar 2015" "Apr 2015" "May 2015" "Jun 2015"
额外提示:如果输出中文月份怎么办?
如果你的系统默认语言是中文,%b可能会输出“一月”“二月”这种中文月份。这时候可以先设置英文 locale:
Sys.setlocale("LC_TIME", "English")
再执行上面的format代码,就能得到英文缩写的月份啦~
内容的提问来源于stack exchange,提问作者user12680
相关产品推荐
相关产品推荐

