#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