2013-01-23 21 views
17

Ho un set di dati denominato EPL2011_12. Vorrei creare un nuovo set di dati inserendo l'originale per data. Le date sono nella colonna Date Le date sono nel formato GG-MM-AA.sottoinsieme R per data

ho cercato

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

e

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

ma questo messaggio di errore ogni volta.

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

Immagino che questo significhi che R tratti come un testo anziché un numero e che quindi non funzioni?

+2

Significa la colonna Data è stata letta come fattore (presumibilmente quando si utilizza 'read.table' o qualche funzione simile). Dovrai convertirlo utilizzando, ad es. 'As.Date'. – joran

+0

Non dimenticare 'as.character()', ad esempio usa 'as.Date (as.character (X),"% d-% m-% y ")'. –

+0

@DirkEddelbuettel Non c'è un metodo 'as.Date.factor', o sto fraintendendo cosa fa ...? – joran

risposta

29

Beh, chiaramente non è un numero dato che ha dei trattini. Il messaggio di errore e le due commenti che dicono che si tratta di un fattore, ma i commentatori sono apparentemente in attesa e lasciando il lavandino messaggio di Dirk sta suggerendo che si esegue questa operazione:.

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

Dopo di che si può fare questo:

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

Le funzioni di data R presuppongono che il formato sia "AAAA-MM-GG" o "AAAA/MM/GG". Hai bisogno di confrontare le classi come: data per data, o carattere per carattere.

+0

Sì, quello ha funzionato. Grazie a tutti. – user1899793

+1

@ user1899793, quindi assicurati di contrassegnare la risposta di DWin come accettata. – A5C1D2H2I1M1N2O1R2T1

+0

Se ci sono altri tipi di data come 2013/01/01 13:34:59 puoi fare riferimento a https://stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html per più dettagli sul formato. – huangli

5

La prima cosa da fare con le variabili di data è confermare che R lo legge come una data. Per fare questo, per la variabile (cioè vettore/colonna) chiamato Data, nella cornice dati chiamata EPL2011_12, ingresso

class(EPL2011_12$Date)

L'uscita dovrebbe leggere [1] "Data". Se così non fosse, si dovrebbe formattarlo come una data inserendo

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

Nota che i trattini nel formato della data ("% d-% m-% y") di cui sopra può anche essere barre ("% d /% m /% y"). Conferma che R lo vede come una data. In caso contrario, provare un diverso comando di formattazione

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

Una volta che avete in formato di data, è possibile utilizzare il comando subset, oppure è possibile utilizzare parentesi

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

Problemi correlati