我有从大量.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日。我如何将这些因素转换为日期和时间。我需要能够利用时间生成记录之间的时间间隔。
答案 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)
感谢所有帮助