Как правильно объединить переменные YEAR и MONTH (в R)? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть таблица TRADES с переменной YEAR (Y2015,Y2016) - как фактор и MONTH (1,2,3 ...) - как integer. Моя цель - создать новую переменную DATE (например, 2015-12). Как я должен действовать, чтобы решить эту проблему в R?

YEAR: Y2015, Y2016, Y2016, Y2015
MONTH: 1, 12, 2, 5

хотел бы создать

DATE:
2015-1, 2016-12, 2016-2, 2015-5

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

это можно решить двумя различными способами. Есть небольшой удобный пакет под названием Zoo, в котором есть класс, представляющий годы и месяцы, который можно использовать, если вы хотите сохранить тот текстовый формат, который вам нравится, и в то же время иметь возможность упорядочивать месяцы и годы по дате. Или вы можете представить их как начало каждого месяца, добавив 01 и преобразовав в стандартный формат даты.

year <- factor(c("Y2015", "Y2016", "Y2016", "Y2015"))
month <- c(1, 12, 2, 5)
#change year to a text variable, (for ease of processing) and remove the Y
year <- as.character(year)
year <- gsub(pattern = "Y", replacement = "", x = year)
# I assume you want this to actually be a date type, lets convert to the text field you want
## paste the fields together

#2 ways of going about this

#Zoo Way
#Represent the data as a year mon class in R (good if you keep it in R)
chr_YYYY_MM <- paste0(year, "-", month)
library(zoo)
yearmon_YYYY_MM<- as.yearmon(x = chr_YYYY_MM)
yearmon_YYYY_MM
# [1] "Jan 2015" "Dec 2016" "Feb 2016" "May 2015"
# You can keep it like this as long as you keep it in R

# you can change it back to a date object easily too: (if you need to upload back to sQL and keep it as a date)
as.Date(as.yearmon(yearmon_YYYY_MM))
# [1] "2015-01-01" "2016-12-01" "2016-02-01" "2015-05-01"

# Base R way
# You would need to append a 01 to the end of it
chr_date <- paste0(year, "-", month, "-", "01")
formated <- as.Date(x = chr_date, format = "%Y-%m-%d", tz = "UTC")
print(formated)
# [1] "2015-01-01" "2016-12-01" "2016-02-01" "2015-05-01"
class(formated)
# [1] "Date"
0 голосов
/ 09 марта 2020

Может быть, вы хотите это так?

DATE <- mapply(paste,gsub("\\D","",YEAR),MONTH,sep = "-")

или

DATE <- paste(gsub("\\D","",YEAR),MONTH,sep = "-")

такой, что

> DATE
     2015      2016      2016      2015 
 "2015-1" "2016-12"  "2016-2"  "2015-5" 

ДАННЫЕ

YEAR<-factor(c( "Y2015", "Y2016", "Y2016", "Y2015"))
MONTH<- c(1, 12, 2, 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...