R将因子YYYY-MM转换为日期

ada*_*888 1 r date

我有一个数据框,其日期格式为YYYY-MM,类因子,我正在尝试将其转换为类日期.

我试过了:

Date <- c("2015-08","2015-09","2015-08")
Val <- c(1,2,3)
df <- data.frame(Date,Val)


df[,1] <- as.POSIXct(as.character(df[,1]), format = "%Y-%m") 
df
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我很感激你的帮助.

G. *_*eck 7

1)将日期转换为动物园的"yearmon"课程,然后转换为"Date"课程:

> library(zoo)
> transform(df, Date = as.Date(as.yearmon(Date)))
        Date Val
1 2015-08-01   1
2 2015-09-01   2
3 2015-08-01   3
Run Code Online (Sandbox Code Playgroud)

问题没有说明要转换的日期,所以我们使用了本月的第一天.如果本月的最后一天被通缉,我们可以使用它:

transform(df, Date = as.Date(as.yearmon(Date), frac = 1))
Run Code Online (Sandbox Code Playgroud)

2)不使用zoo的另一种可能性是自己添加月份的日期,然后转换为"Date"类.

> transform(df, Date = paste(Date, 1, sep = "-"))
        Date Val
1 2015-08-01   1
2 2015-09-01   2
3 2015-08-01   3
Run Code Online (Sandbox Code Playgroud)

3)或者,可能只想"yearmon"直接使用,因为直接模拟年和月没有一天.

> library(zoo)
> transform(df, Date = as.yearmon(Date))
      Date Val
1 Aug 2015   1
2 Sep 2015   2
3 Aug 2015   3
Run Code Online (Sandbox Code Playgroud)

注意:不要使用"POSIXct"类,因为这会给出一个时区相关的结果,如果你不小心,可能会导致细微的错误.一个时区中的日期不一定与另一个时区中的日期相同.


Ren*_*rop 5

R不支持“%Y-%m”格式的日期...需要一天

您可以执行以下操作:

as.POSIXct(paste0(as.character(df[,1]),"-01"), format = "%Y-%m-%d")
Run Code Online (Sandbox Code Playgroud)

导致

"2015-08-01 CEST" "2015-09-01 CEST" "2015-08-01 CEST"
Run Code Online (Sandbox Code Playgroud)