将YYYYMM因子格式转换为YYYY-MM格式

时间:2019-01-15 14:16:23

标签: r

我有YYYYMM格式的数据,希望将其转换为YYYY-MM格式。

示例:201805的格式应为2018-05

我该怎么办?

6 个答案:

答案 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"
相关问题