Дата из символьных и числовых столбцов в R

#r #date #data-manipulation

#r #Дата #манипулирование данными

Вопрос:

У меня есть набор данных с форматом. Как мне объединить их в столбец формата даты?

 year   mon  day  

1997    Jul   3   
1997    Jul   1   
1997    Sep   10   
1997    Sep   1     
1998    Oct   10      
  

Ответ №1:

Вы можете paste объединить 3 столбца и преобразовать их в дату с помощью as.Date :

 df <- transform(df, date = as.Date(paste(year, mon, day), '%Y %b %d'))
  

Также можно использовать ymd from lubridate .

 library(dplyr)
library(lubridate)

df %>% mutate(date = ymd(paste(year, mon, day)))

#  year mon day       date
#1 1997 Jul   3 1997-07-03
#2 1997 Jul   1 1997-07-01
#3 1997 Sep  10 1997-09-10
#4 1997 Sep   1 1997-09-01
#5 1998 Oct  10 1998-10-10
  

данные

 df <- structure(list(year = c(1997L, 1997L, 1997L, 1997L, 1998L), mon = c("Jul", 
"Jul", "Sep", "Sep", "Oct"), day = c(3L, 1L, 10L, 1L, 10L)), 
class = "data.frame", row.names = c(NA, -5L))
  

Ответ №2:

Аналогичный ответ с @Ronak Shah, с использованием anytime пакета

 library(dplyr)
library(anytime)
library(stringr)
df %>% 
  mutate(year_mon_date = anydate(str_c(V1, V2, V3)))
           
#     V1  V2 V3 year_mon_date
# 1 1997 Jul  3    1997-07-03
# 2 1997 Jul  1    1997-07-01
# 3 1997 Sep 10    1997-09-10
# 4 1997 Sep  1    1997-09-01
# 5 1998 Oct 10    1998-10-10 
  

Данные

 structure(list(V1 = c(1997L, 1997L, 1997L, 1997L, 1998L), V2 = c("Jul", 
"Jul", "Sep", "Sep", "Oct"), V3 = c(3L, 1L, 10L, 1L, 10L)), class = "data.frame", row.names = c(NA, 
-5L))
  

Комментарии:

1. Вы использовали, str_c() но не загружаете stringr .

2. Я добавил. Спасибо @Darren Tai, дорогой.

Ответ №3:

Вы можете использовать make_date() from lubridate .

 library(dplyr)
library(lubridate)

df %>%
  mutate(date = make_date(year, match(mon, month.abb), day))

#   year mon day       date
# 1 1997 Jul   3 1997-07-03
# 2 1997 Jul   1 1997-07-01
# 3 1997 Sep  10 1997-09-10
# 4 1997 Sep   1 1997-09-01
# 5 1998 Oct  10 1998-10-10
  

где month.abb — встроенный вектор, хранящий сокращения для названий английских месяцев.


Данные

 df <- structure(list(year = c(1997L, 1997L, 1997L, 1997L, 1998L), mon = c("Jul", 
"Jul", "Sep", "Sep", "Oct"), day = c(3L, 1L, 10L, 1L, 10L)), 
class = "data.frame", row.names = c(NA, -5L))