Изменение date.format в R - PullRequest
0 голосов
/ 05 мая 2020

Итак, давайте представим, что у меня есть вектор, содержащий даты:

vec <- c(11993, 21993, 31993, 41993) 

Как я могу эффективно преобразовать его в вектор, содержащий квартальные даты:

vec <- c(T1 1993, T2 1993, T3 1993, T4 1993)

Спасибо

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

База R:

sub("^(.*)(.{4})$", "T\\1 \\2", vec)
# [1] "T1 1993" "T2 1993" "T3 1993" "T4 1993"
1 голос
/ 05 мая 2020

Другое базовое решение R без регулярного выражения

paste0("T", substr(vec, 1, 1), " ", substr(vec, 2, 5))
# [1] "T1 1993" "T2 1993" "T3 1993" "T4 1993"
1 голос
/ 05 мая 2020

Вы можете использовать stringr:

library(stringr)

quarter <- paste0("T",str_sub(vec, start = 1L, end = 1L))
vec <- paste0(quarter, " ",str_sub(vec, start = 2L))

Что дает вам:

"T1 1993" "T2 1993" "T3 1993" "T4 1993"

Обновление:

Вы можете использовать пакет zoo для преобразования набрать yearqtr:

vec_date <- as.yearqtr(vec, format = "T%q %Y")

Что дает нам:

"1993 Q1" "1993 Q2" "1993 Q3" "1993 Q4"

Вы также можете включить as.Date:

vec_date <- as.Date(as.yearqtr(vec, format = "T%q %Y"))

Что дает нам:

"1993-01-01" "1993-04-01" "1993-07-01" "1993-10-01"

Все вместе:

library(zoo)
library(tidyverse)

# Your vector
vec <- c(11993, 21993, 31993, 41993)

# Substring to create "T" values
quarter <- paste0("T",str_sub(vec, start = 1L, end = 1L))

# Paste back together
vec <- paste0(quarter, " ",str_sub(vec, start = 2L))

# Keep as yearqtr 
vec_date <- as.yearqtr(vec, format = "T%q %Y")

# Keep as.Date
vec_date <- as.Date(as.yearqtr(vec, format = "T%q %Y"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...