web-dev-qa-db-fra.com

Sous-ensemble data.frame par date

J'ai un jeu de données appelé EPL2011_12. Je voudrais créer un nouvel ensemble de données en sous-configurant l'original par date. Les dates sont dans la colonne nommée Date Les dates sont au format JJ-MM-AA.

J'ai essayé

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

et

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

mais obtenez ce message d'erreur à chaque fois.

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

Je suppose que cela signifie que R traite comme du texte au lieu d'un nombre et que cela ne fonctionnera pas?

22
user1899793

Eh bien, ce n'est clairement pas un nombre car il contient des tirets. Le message d'erreur et les deux commentaires vous indiquent que c'est un facteur mais les commentateurs attendent et laissent le message couler. Dirk suggère que vous fassiez ceci:

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

Après cela, vous pouvez le faire:

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

Les fonctions de date R supposent que le format est "AAAA-MM-JJ" ou "AAAA/MM/JJ". Vous devez comparer des classes similaires: date à date ou caractère à caractère.

40
42-

La première chose que vous devez faire avec les variables de date est de confirmer que R le lit comme une date. Pour ce faire, pour la variable (c.-à-d. Vecteur/colonne) appelée Date, dans la trame de données appelée EPL2011_12, entrez

class(EPL2011_12$Date)

La sortie doit lire [1] "Date". Si ce n'est pas le cas, vous devez le formater comme une date en saisissant

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

Notez que les tirets au format de date ("% d-% m-% y") ci-dessus peuvent également être des barres obliques ("% d /% m /% y"). Confirmez que R le voit comme une date. Si ce n'est pas le cas, essayez une autre commande de formatage

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

Une fois que vous l'avez au format Date, vous pouvez utiliser la commande subset, ou vous pouvez utiliser des crochets

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

6
coip