2014-04-28 12 views
10

to informacje zawarte w moim dataframe:Factor Convert to Date/Time w R

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",... 
## dDdt: num 7.8564 2.318 ... 
## minutes: POSIXlt, format: NA NA NA 

muszę konwertować minutę kolumny dzień do formatu daty/czasu:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S") 

Próbowałem już as.POSIXlt, as.POSIXct i as.Date. Żadna z nich nie działała. Czy ktoś ma JAKIEKOLWIEK myśli.

Celem jest wykreślenie minut w stosunku do dDdt, ale nie pozwoli mi to na spiskowanie w określonym czasie, który chcę jako czynnik. Nie mam pojęcia, co dalej wypróbować ...

+0

Musisz wybrać odpowiedź, aby na to pytanie odpowiedzieć. –

Odpowiedz

14

Przed analizą jako datetime lub datą należy wstawić as.character().

Czynnik zawsze powraca jako numer odpowiadający jego poziomowi.

Możesz zapisać konwersję z czynnika na znak, informując read.csv() itp. O braku sklepu jako czynnik: stringsAsFactors=FALSE. Możesz również ustawić to jako opcję globalną.

Po to jako znak, upewnij dopasować ciąg formatu do danych:

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S") 
[1] "2013-06-01 08:07:00 CDT" 
R> 

Zanotuj %Y-%m-%d Kiedyś, w przeciwieństwie do swojego %m/%d/%y.

Edycja w dniu 3 stycznia 2016: To jest teraz o wiele łatwiejsze dzięki opakowaniu anytime który automagicznie konwertuje z wielu typów, w tym factor, i robi to bez konieczności ciąg formatu.

R> as.factor("2013-06-01 08:07:00") 
[1] 2013-06-01 08:07:00 
Levels: 2013-06-01 08:07:00 
R> 
R> library(anytime) 
R> anytime(as.factor("2013-06-01 08:07:00")) 
[1] "2013-06-01 08:07:00 CDT" 
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00"))) 
[1] "POSIXct" "POSIXt" 
R> 

Jak widać po prostu nakarmić zmienną czynnik w anytime() i obecnie jest żądany typ POSIXct.

+0

Myślę, że już wstawił 'as.character' problem polega na tym, że ma błąd w formacie imo –

+0

Dzięki, zauważyłem, że również w drugim czytałem i poszerzałem swoją odpowiedź. Pozostały problem (który powtarza twoja odpowiedź) to konwersja 'as.POSIXlt' (bez wyodrębniania minut). –

7

Spróbuj

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

ten powróci minuteave $ minut jako obiekt POSIXct.

Mam nadzieję, że to pomoże.