Как я могу удалить несколько символьных строк в столбце и заменить их на дату

#r #date #character #converters

#r #Дата #символ #конвертеры

Вопрос:

У меня есть столбец даты, который имеет такие значения: 2003MM01 , 2003MM02 , 2003MM03 Как вы можете догадаться MM01 , обозначает первый месяц и MM02 второй месяц и т.д.. Если я посмотрю на структуру из моего фрейма данных, он скажет, что столбец даты является символом. Я хочу, чтобы мой столбец даты выглядел следующим образом.

 date column
2003-01-01
2003-02-01
2003-03-01
2003-04-01
2003-05-01
  

Я также должен упомянуть, что в моем столбце даты несколько лет с одной и той же символьной строкой, так 2004MM01 что , 2005MM01 , и т.д.. Есть идеи, как заменить символьные строки правильной датой? а также преобразовать столбец даты из символа в дату?

Ответ №1:

 vec <- c("2003MM01", "2003MM02", "2003MM03", "2004MM01", "2005MM01")
as.Date(gsub("MM(.*)$", "-\1-01", vec))
# [1] "2003-01-01" "2003-02-01" "2003-03-01" "2004-01-01" "2005-01-01"
  

Ответ №2:

Попробуйте этот base R подход, также используя paste0() для добавления дня, а затем используя as.Date() для преобразования в дату. Здесь код:

 #Data
df <- data.frame(date=c('2003MM01', '2003MM02', '2003MM03'),stringsAsFactors = F)
#Format date
df$Col1 <- as.Date(paste0(df$date,'01'),'%YMM%m%d')
  

Вывод:

       date       Col1
1 2003MM01 2003-01-01
2 2003MM02 2003-02-01
3 2003MM03 2003-03-01
  

Ответ №3:

Мы можем использовать ymd из lubridate

 library(lubridate)
library(stringr)
ymd(str_remove(vec, "MM"), truncated = 2)
#[1] "2003-01-01" "2003-02-01" "2003-03-01" "2004-01-01" "2005-01-01"
  

данные

 vec <- c("2003MM01", "2003MM02", "2003MM03", "2004MM01", "2005MM01")