#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))