Изменение с целого числа на дату в R

#r #date #lubridate

Вопрос:

У меня есть следующий кадр данных, и я хочу изменить формат переменных месяца и года на сегодняшний день

 data.frame':    450 obs. of  3 variables:
 $ month : int  11 12 1 2 3 4 5 6 7 8 ...
 $ year  : int  2010 2010 2011 2011 ...
 $ num3  : num  157 124.3 196.5 197 70.8 ... 
 

Я пробую, но получаю ошибку:

 as.Date(df$month, format="%m")

Error in as.Date.numeric(df$month, format = "%m") : 
  'origin' must be supplied
 

Как я могу это исправить? Кроме того, я хочу создать новую переменную с месяцем и годом

Ответ №1:

Кажется очевидным, что вы хотите большего, чем просто месяц. Таким образом, вы можете использовать как месяц, так и год, но вам также понадобится полный день месяца, поэтому давайте предположим, что 15-й день.

    df$real_Date <- as.Date( paste(df$year,df$month, 15, sep="-") )

> month <- scan( text=" 11 12 1 2 3 4 5 6 7 8")
Read 10 items
> year <- scan( text="  2010 2010 2011 2011 2011 2011 2011 2011 2011 2011")
Read 10 items
> num3  <- scan( text=" 157 124.3 196.5 197 70.8 ")
Read 5 items
> df <- data.frame(month,year,num3)
> df
   month year  num3
1     11 2010 157.0
2     12 2010 124.3
3      1 2011 196.5
4      2 2011 197.0
5      3 2011  70.8
6      4 2011 157.0
7      5 2011 124.3
8      6 2011 196.5
9      7 2011 197.0
10     8 2011  70.8
> df$real_Date <- as.Date( paste(df$year,df$month, 15, sep="-") )
> df
   month year  num3  real_Date
1     11 2010 157.0 2010-11-15
2     12 2010 124.3 2010-12-15
3      1 2011 196.5 2011-01-15
4      2 2011 197.0 2011-02-15
5      3 2011  70.8 2011-03-15
6      4 2011 157.0 2011-04-15
7      5 2011 124.3 2011-05-15
8      6 2011 196.5 2011-06-15
9      7 2011 197.0 2011-07-15
10     8 2011  70.8 2011-08-15
 

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

1. Спасибо за ваш ответ, но в моем наборе данных нет столбца с датой, это странно, но это так.

Ответ №2:

Мы также могли ISOdate бы использовать base R

 df$date <-  with(df, as.Date(ISOdate(year, month, 1)))
 

данные

 df <- data.frame(month = c(11, 12, 1, 2), year = c(2010, 2010, 2011, 2011))
 

Ответ №3:

Мы могли бы использовать make_date из lubridate пакета:

 library(dplyr)
library(lubridate)
df %>% 
  mutate(date = make_date(year, month))
 

Выход:

   month  year  num3 date      
  <dbl> <dbl> <dbl> <date>    
1    11  2010  157  2010-11-01
2    12  2010  124. 2010-12-01
3     1  2011  196. 2011-01-01
4     2  2011  197  2011-02-01