2013-01-23 18 views
17

Mam zestaw danych o nazwie EPL2011_12. Chciałbym utworzyć nowy zestaw danych, dzieląc oryginał według daty. Daty są w kolumnie o nazwie Date Daty są w formacie DD-MM-RR.R podzbiór według daty

Próbowałem

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > 13-01-12) 

i

EPL2011_12FirstHalf <- subset(EPL2011_12, Date > "13-01-12") 

ale się tego komunikatu o błędzie za każdym razem.

Warning message: 
In Ops.factor(Date, 13- 1 - 12) : > not meaningful for factors 

Zgaduję, że oznacza to, że R traktuje jak tekst zamiast liczby, i dlaczego to nie zadziała?

+2

Oznacza to, Twoja kolumna Data została odczytana jako czynnik (prawdopodobnie podczas używania 'read.table' lub jakiejś podobnej funkcji). Konieczna będzie konwersja za pomocą np. 'as.Date'. – joran

+0

Nie zapomnij o 'as.character()', np. Użyj 'as.Date (jako. Character (X),"% d-% m-% y ")'. –

+0

@DirkEddelbuettel Czy nie istnieje metoda 'as.Date.factor', czy też nie rozumiem, co to oznacza ...? – joran

Odpowiedz

29

Cóż, wyraźnie nie jest liczbą, ponieważ zawiera kreski. Komunikat o błędzie, a dwa komentarze powiedzieć, że jest to czynnik, ale komentatorzy są najwyraźniej czekając i pozwalając zlew wiadomość w Dirk sugeruje, że można to zrobić.

EPL2011_12$Date2 <- as.Date(as.character(EPL2011_12$Date), "%d-%m-%y") 

Po tym można to zrobić:

EPL2011_12FirstHalf <- subset(EPL2011_12, Date2 > as.Date("2012-01-13")) 

R funkcje daty przyjmują, że format to "RRRR-MM-DD" lub "RRRR/MM/DD". Musisz porównać takie klasy: od daty do daty lub od postaci do postaci.

+0

Tak, to zadziałało. Dzięki wszystkim. – user1899793

+1

@ user1899793, następnie należy zaznaczyć odpowiedź DWin jako zaakceptowaną. – A5C1D2H2I1M1N2O1R2T1

+0

Jeśli istnieją inne typy dat, takie jak 2013/01/01 13:34:59, możesz zapoznać się z https://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html dla więcej szczegółów dotyczących formatu. – huangli

5

Pierwszą rzeczą, którą powinieneś zrobić ze zmiennymi daty, jest potwierdzenie, że R odczytuje ją jako datę. Aby to zrobić, na zmienną (to znaczy wektor/kolumna) tzw Data, w ramce danych o nazwie EPL2011_12, wejście

class(EPL2011_12$Date)

wyjście jest następujący [1] "Data". Jeśli tak nie jest, należy sformatować go jako data wprowadzając

EPL2011_12$Date <- as.Date(EPL2011_12$Date, "%d-%m-%y")

Uwaga że myślniki w formacie daty („% d-% m-% y”) powyżej mogą być również ukośniki ("% d /% m /% y"). Potwierdź, że R widzi to jako datę. Jeśli nie, spróbuj innego polecenia formatowania

EPL2011_12$Date <- format(EPL2011_12$Date, format="%d/%m/%y")

Gdy masz go w formacie data, można użyć komendy subset, czy można użyć nawiasów

WhateverYouWant <- EPL2011_12[EPL2011_12$Date > as.Date("2014-12-15"),]