我有YYYYMM
格式的数据,希望将其转换为YYYY-MM
格式。
示例:201805
的格式应为2018-05
我该怎么办?
答案 0 :(得分:5)
我们可以使用as.yearmon
中的zoo
将其转换为yearmon对象,然后执行format
library(zoo)
format(as.yearmon(as.character(v1), "%Y%m"), "%Y-%m")
#[1] "2018-05"
v1 <- 201805
答案 1 :(得分:4)
我喜欢在这里使用实际日期的想法。如果天数对您来说无关紧要,那么您可以随意将每个日期设置为每月的第一天。然后,我们可以利用R的日期函数来处理繁重的工作。
'_'
答案 2 :(得分:3)
您可以使用正则表达式:
data <- "201805"
sub("(\\d{4})", "\\1-", data)
[1] "2018-05"
另一个变体,仅使用环顾四周:
sub("(?<=\\d{4})(?=\\d{2})", "-", data, perl=TRUE)
答案 3 :(得分:1)
接下来要怎么做(我认为OP不需要在这里对其变量的值进行任何检查)。
val="201805"
sub("(..$)","-\\1",val)
或执行最后两位数字的替换,请仅尝试以下操作。
val="201805"
sub("(\\d{2}$)","-\\1",val)
[1] "2018-05"
答案 4 :(得分:0)
与其他一些非常相似,但是由于我发现该软件包很有用,因此我将其提及:
library(lubridate)
date <- "201805"
format(ymd(paste0(date,"01")), "%Y-%m")
如果格式开始变化,Lubridate可以使生活变得轻松
答案 5 :(得分:0)
这是另一个选择,尽管更长:
library(tidyverse)
somestring<-"201805"
stringi::stri_sub(somestring,1,4)<-"-"
somestring1<-"201805"
somestring2<-substring(somestring1,1,4)
as.character.Date(paste0(somestring2,somestring))
结果:
"2018-05"