Преобразовать формат коэффициента ГГГГММ в формат ГГГГ-ММ - PullRequest
0 голосов
/ 15 января 2019

У меня есть данные в формате YYYYMM, и я хочу преобразовать их в формат YYYY-MM.

пример: 201805 должно быть в формате 2018-05

Как я могу это сделать, пожалуйста?

Ответы [ 6 ]

0 голосов
/ 15 января 2019

Вот еще один вариант, хотя и более длинный:

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"
0 голосов
/ 15 января 2019

Очень похоже на некоторые другие, но, поскольку я нахожу пакет полезным, я упомяну его:

library(lubridate)

date <- "201805"
format(ymd(paste0(date,"01")), "%Y-%m")

Lubridate может облегчить жизнь, если форматы начинают меняться.

0 голосов
/ 15 января 2019

Как насчет следующего (я считаю, что OP не нужно выполнять какие-либо проверки значения его переменной здесь).

val="201805"
sub("(..$)","-\\1",val)

ИЛИ, чтобы выполнить замену только с двумя последними цифрами, попробуйте выполнить следующее.

val="201805"
sub("(\\d{2}$)","-\\1",val)
[1] "2018-05"
0 голосов
/ 15 января 2019

Мне нравится идея использования фактических дат здесь. Если компонент дней не имеет значения для вас, вы можете произвольно установить каждую из ваших дат на первое число месяца. Затем мы можем использовать функции дат R для обработки тяжелой работы.

x <- "201805"
x <- paste0(x, "01")
x
y <- format(as.Date(x, format = "%Y%m%d"), "%Y-%m-%d")
substr(y, 1, 7)

[1] "20180501"
[1] "2018-05"
0 голосов
/ 15 января 2019

Мы можем использовать as.yearmon из zoo, чтобы преобразовать его в объект yearmon, а затем сделать format

library(zoo)
format(as.yearmon(as.character(v1), "%Y%m"), "%Y-%m")
#[1] "2018-05"

данные

v1 <- 201805
0 голосов
/ 15 января 2019

Вы можете использовать регулярные выражения:

data <- "201805"
sub("(\\d{4})", "\\1-", data)
[1] "2018-05"

Другой вариант, использующий только обходные пути:

sub("(?<=\\d{4})(?=\\d{2})", "-", data, perl=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...