如何将R语言中的日期字符串从"10-1-2018"转为"2018-10-1"?
在R中转换日期字符串格式的方法
当然有办法解决这个问题!在R里处理日期格式转换很灵活,我给你两种实用方案:
方案1:直接拆分重组字符串(简单快速)
如果只是单纯调整日期各部分的顺序,不需要后续做日期计算,直接拆分字符串再拼接是最直接的方式:
# 处理"10-1-2018" original_date <- "10-1-2018" date_parts <- strsplit(original_date, "-")[[1]] new_date <- paste(date_parts[3], date_parts[1], date_parts[2], sep = "-") new_date # 输出: "2018-10-1" # 处理"1-1-2018" original_date2 <- "1-1-2018" date_parts2 <- strsplit(original_date2, "-")[[1]] new_date2 <- paste(date_parts2[3], date_parts2[1], date_parts2[2], sep = "-") new_date2 # 输出: "2018-1-1"
这个方法完全不需要依赖额外包,而且不管系统环境,都能保留原始数字的格式(不带前导零)。
方案2:转成日期对象再格式化(适合后续日期操作)
如果你之后还需要对日期做加减、提取年/月/日等操作,建议先把字符串转成R的日期对象,再按需格式化:
用base R实现
# 转换"10-1-2018" date_obj <- as.Date("10-1-2018", format = "%m-%d-%Y") # 注意:不同系统去除前导零的语法略有区别 # Windows系统 new_date <- format(date_obj, "%Y-%#m-%#d") # Linux/macOS系统 new_date <- format(date_obj, "%Y-%-m-%-d") new_date # 输出: "2018-10-1" # 转换"1-1-2018"同理 date_obj2 <- as.Date("1-1-2018", format = "%m-%d-%Y") new_date2 <- format(date_obj2, "%Y-%#m-%#d") # Windows用这个,mac/Linux换%-m-%-d new_date2 # 输出: "2018-1-1"
用lubridate包实现(更简洁)
lubridate是R中处理日期的热门包,语法更直观:
# 先安装包(第一次用的话) install.packages("lubridate") library(lubridate) # 转换"10-1-2018" date_obj <- mdy("10-1-2018") # mdy代表月-日-年的格式 new_date <- paste(year(date_obj), month(date_obj), day(date_obj), sep = "-") new_date # 输出: "2018-10-1" # 转换"1-1-2018" date_obj2 <- mdy("1-1-2018") new_date2 <- paste(year(date_obj2), month(date_obj2), day(date_obj2), sep = "-") new_date2 # 输出: "2018-1-1"
这样转成日期对象后,你还能轻松做比如date_obj + days(7)这样的日期运算,非常方便。
内容的提问来源于stack exchange,提问作者WoeIs
相关产品推荐
相关产品推荐

