我的原始Excel文件中的日期是以“Jan-01”格式表示每个月的数据。当然,我可以手动将它们转换为更有用的格式,然后再输入到R中。
我该如何将这样的日期转换为R中的日期类呢?
如果您需要一个日期类,请使用as.Date:
x <- "Jan-01"
as.Date(paste("01-", x, sep = ""), format = "%d-%b-%y")
如果您想要一个 POSIXct
类,请考虑使用 lubridate
:library(lubridate)
x <- "Jan-01"
dmy(paste("01-", x , sep =""))
如果你只想依赖于 base
:
x <- "Jan-01"
as.POSIXct(paste("01-", x, sep = ""), format = "%d-%b-%y")
as.Date
返回了NA结果,因为R无法猜测出完整日期。 - thelatemaillubridate
方便地提供了my
函数,因此不需要使用dmy
和paste
。 - stucash编辑:
最简单的方法是使用zoo中的yearmon类:
require(zoo)
as.yearmon(x, "%b-%y")
#[1] "Jan 2001"
稍微长一些的方法:
x="Jan-01"
xs<-strsplit(x, "-")
xd <- as.Date( xs[[1]][2], paste( xs[[1]][1], "01", sep="-"), format="%y-%b-%d")
xd
#[1] "2001-01-01"
sapply
。xd <- as.Date(paste(xs[[1]][1], xs[[1]][2], sep="-"), format="%b-%y") xd [1] NA xd <- as.Date(paste(xs[[1]][1], xs[[1]][2], sep="-"), format="%b-%Y") xd [1] NA xd <- as.Date(paste(xs[[1]][1], xs[[1]][2], sep="-"), format="d%-%b-%Y") xd [1] NA- Fred
如果你强制指定月份的第一天,你可以这样转换日期:
datevar <- c("Jan-01","Feb-01","Mar-12")
as.Date(paste("01",datevar,sep="-"),"%d-%b-%y")
datevar <- "Jan-01"; as.Date(paste("01",datevar,sep="-"),"%d-%b-%y");
- thelatemail