2014-01-18 3 views
0

У меня есть набор данных, импортированный из большой группы CSV-файлов. Импорт даты как фактор, но данные в следующем форматеПреобразование фактора в дату в R

, 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 

Для примера будет 26 октября 2011 г. Как бы преобразовать эти факторы к дате и времени к времени. Мне нужно иметь возможность использовать время для создания интервала времени между записями.

ответ

4

Вы уверены, что в течение месяца есть только две буквы? Это не имеет никакого смысла !, как вы говорите между ИЮНА и ИЮЛЯ ?. Если вы можете получить три письма, вы можете сделать что-то простое.

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

Вы также можете использовать уровни() [] вместо as.character(), но это должно быть проще сейчас

Теперь, если вы хотите, чтобы время. Вы можете собрать все это вместе с этой командой

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

Вы должны быть особенно осторожны с форматом. Вы можете увидеть список того, что% I,% г и так, значит ... здесь http://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html

+2

JN = июнь JL = июля Спасибо всем вам за помощь !! !! – Dan

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" 

Однако было бы интересно посмотреть, как июль & июня отличается, когда вы получили только 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" 
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) 

Спасибо за помощь

Смежные вопросы