将格式为“Jan-01”的月份和年份字符串转换为日期格式。

8

我的原始Excel文件中的日期是以“Jan-01”格式表示每个月的数据。当然,我可以手动将它们转换为更有用的格式,然后再输入到R中。

我该如何将这样的日期转换为R中的日期类呢?


正如标题中明确提到的那样,它是月份和年份,而不是月份和日期。strptime("Jan-01","%b-%d") [1] "2012-01-01" > strptime("Jan-01","%b-%y") [1] NA - Fred
1
在日期前面添加1以表示该月的第一天:datevar <- "Jan-01"; as.Date(paste("01",datevar,sep="-"),"%d-%b-%y"); - thelatemail
3个回答

15

如果您需要一个日期类,请使用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")

1
正如OP所指出的那样,第一个as.Date返回了NA结果,因为R无法猜测出完整日期。 - thelatemail
lubridate方便地提供了my函数,因此不需要使用dmypaste - stucash

5

编辑:

最简单的方法是使用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
1
好的,很容易修复。两位数年份的格式规范应为%y而不是%Y。 - IRTFM

0

如果你强制指定月份的第一天,你可以这样转换日期:

datevar <- c("Jan-01","Feb-01","Mar-12")
as.Date(paste("01",datevar,sep="-"),"%d-%b-%y")

需要注意的是,这基本上与DWin在下面给出的答案相同,只是手动指定了日期而不是年份。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接