在R中将因子转换为日期

时间:2014-01-18 23:37:30

标签: r date r-factor

我有从大量.csv文件导入的数据集。日期导入为因子,但数据采用以下格式

,    11,   4480, - 4570,NE,  12525,LB, ,    10,      ,  ,    ,    0, 7:26A,26OC11,        
 ,    11,   7090, - 7290,NE,   5250,LB, ,     9,      ,  ,    ,    0, 7:28A,26OC11,        
 ,    11,   5050, - 5065,NE,     50,LB, ,     7,      ,  ,    ,    0, 7:31A,26OC11,        
 ,    12,   5440, - 5530,NE,  13225,LB, ,     6,      ,  ,    ,    0, 8:10A,26OC11,        
 ,    12,   1020, - 1220,NE,  12020,LB, ,    14,      ,  ,    ,    0, 8:12A,26OC11,        
 ,    12,     50, -   25,NE,  12040,LB, ,    15,      ,  ,    ,    0, 8:13A,26OC11,      
4

例如,2011年10月26日。我如何将这些因素转换为日期和时间。我需要能够利用时间生成记录之间的时间间隔。

4 个答案:

答案 0 :(得分:4)

你确定这个月只有两封信吗?这没有任何意义!你怎么说6月和7月之间?如果你能得到三个字母就可以做这样简单的事情。

as.Date(as.character(mydata$mydate), format = '%d%b%y')

您也可以使用levels()[]而不是as.character(),但现在应该更简单

现在,如果你也想要时间。您可以将这一切与此命令结合使用

as.POSIXct(strptime(paste(as.character(mydata$mydate), paste(as.character(mydata$mytime), "M", sep = "")), "%d%b%y %I:%M%p"))

您必须特别注意格式。您可以看到%I,%d等列表,表示...... http://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html

答案 1 :(得分:3)

a <- c("26OC11", "01JA12")
month.abb.2 <- toupper(substr(month.abb, 0, 2))
for (i in seq_along(month.abb.2))
  a <- sub(month.abb.2[i], month.abb[i], a)
as.Date(a, format="%d%b%y")
# [1] "2011-10-26" "2012-01-01"

然而,看看Jul&amp;当月份名称只有2个字符时,Jun会有所不同。看起来不寻常

答案 2 :(得分:0)

如前所述,一个月内收到2个字母是不正常的,但您可以使用一些正则表达式添加缺失的字母。然后,您使用dmy中的lubridate来转换日期。我在这里使用gsubfn

library(lubridate)
library(gsubfn)
dmy(gsubfn("OC|JA",list(OC="OCT",JA="JAN"),   ## You can extend here for other months
   c("26OC11","26JA12")))

[1] "2011-10-26 UTC" "2012-01-26 UTC"

答案 3 :(得分:0)

这就是我最终创建所需日期的方式

Day<-substring(Date,1,2)
  Month<-substring(Date,3,4)
  Year<-substring(Date,5,6)
  Month<-replace(Month,Month=="AU",8)
  Month<-replace(Month,Month=="JA",1)
  Month<-replace(Month,Month=="FE",2)
  Month<-replace(Month,Month=="MR",3)
  Month<-replace(Month,Month=="AP",4)
  Month<-replace(Month,Month=="MY",5)
  Month<-replace(Month,Month=="JN",6)
  Month<-replace(Month,Month=="JL",7)
  Month<-replace(Month,Month=="SE",9)
  Month<-replace(Month,Month=="OC",10)
  Month<-replace(Month,Month=="NO",11)
  Month<-replace(Month,Month=="DE",12)
  Date2 <- as.Date( paste( Month , Day , Year, sep = "." )  , format = "%m.%d.%y" )
  dataset$Day<-Day
  dataset$Month<-Month
  dataset$Year<-Year
  dataset$Date2<-Date2
  Weekday<-weekdays(Date2)
  dataset$Weekday<-as.factor(Weekday)

感谢所有帮助