在 R 中从整数更改为日期
Change from integer to date in R
我有下一个数据框,我想将月份和年份变量的格式更改为日期
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
我该如何解决?另外,我想用月和年创建新变量
很明显,您想要的不仅仅是一个月。因此,您可以同时使用月份和年份,但您还需要一个月中的完整一天,所以我们假设第 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
我们可以使用 lubridate
包中的 make_date
:
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
我们还可以使用 base R
中的 ISOdate
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))
我有下一个数据框,我想将月份和年份变量的格式更改为日期
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
我该如何解决?另外,我想用月和年创建新变量
很明显,您想要的不仅仅是一个月。因此,您可以同时使用月份和年份,但您还需要一个月中的完整一天,所以我们假设第 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
我们可以使用 lubridate
包中的 make_date
:
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
我们还可以使用 base R
ISOdate
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))