Supprimer les données du week-end dans un dataframe
Question
Comme vous pouvez le voir dans le DataFrame ci-dessous, RBomberg renvoie NAS pour les dates du week-end.
Je veux retirer toute la ligne si elle tombe un week-end. Comment pourrais-je faire cela?
Je ne veux pas utiliser le na.omit Comme cela pourrait supprimer les lignes en semaine si / quand j'obtiens un NA là-bas dans les données pour une raison légitime.
ticker date yld_ytm_mid
1 R206 2011-05-11 6.946
2 R206 2011-05-12 6.969
3 R206 2011-05-13 7.071
4 R206 2011-05-14 NA
5 R206 2011-05-15 NA
6 R201 2011-05-11 7.201
7 R201 2011-05-12 7.213
8 R201 2011-05-13 7.323
9 R201 2011-05-14 NA
10 R201 2011-05-15 NA
11 R157 2011-05-11 7.611
12 R157 2011-05-12 7.622
13 R157 2011-05-13 7.718
14 R157 2011-05-14 NA
15 R157 2011-05-15 NA
16 R203 2011-05-11 8.165
17 R203 2011-05-12 8.170
18 R203 2011-05-13 8.279
19 R203 2011-05-14 NA
20 R203 2011-05-15 NA
21 R204 2011-05-11 8.303
22 R204 2011-05-12 8.296
23 R204 2011-05-13 8.386
24 R204 2011-05-14 NA
25 R204 2011-05-15 NA
26 R207 2011-05-11 8.361
27 R207 2011-05-12 8.371
28 R207 2011-05-13 8.479
29 R207 2011-05-14 NA
30 R207 2011-05-15 NA
31 R208 2011-05-11 8.392
32 R208 2011-05-12 8.393
33 R208 2011-05-13 8.514
34 R208 2011-05-14 NA
35 R208 2011-05-15 NA
36 R186 2011-05-11 8.546
37 R186 2011-05-12 8.571
38 R186 2011-05-13 8.664
39 R186 2011-05-14 NA
40 R186 2011-05-15 NA
41 R213 2011-05-11 8.783
42 R213 2011-05-12 8.802
43 R213 2011-05-13 8.898
44 R213 2011-05-14 NA
45 R213 2011-05-15 NA
46 R209 2011-05-11 8.785
47 R209 2011-05-12 8.807
48 R209 2011-05-13 8.898
49 R209 2011-05-14 NA
50 R209 2011-05-15 NA
51 R214 2011-05-11 8.841
52 R214 2011-05-12 8.861
53 R214 2011-05-13 8.958
54 R214 2011-05-14 NA
55 R214 2011-05-15 NA
La solution
Convertissez la colonne de date en un POSIXLT, par exemple
date <- as.POSIXlt(date,format="%Y-%m-%d")
Ensuite, vous pouvez accéder au jour de la semaine en utilisant
date$wday
et sous-ensemble le cadre de manière appropriée
Autres conseils
Pour l'exhaustivité, j'ajouterais à la réponse de Blindjesse que la frappe? La semaine révèle que R a des fonctions de base en semaine (), des mois () et des quartiers () qui fonctionnent sur les types de POSIX et de dates, et je crois vectorisé, donc ceci fonctionnerait aussi:
!(weekdays(as.Date(date)) %in% c('Saturday','Sunday'))
La réponse de BlindJesse est correcte et utile car elle retombe aux fonctions R de base.
De nombreux packages ont des emballages d'assistance supplémentaires. Voici un de heure Date qui nécessite une conversion à son type:
R> isWeekend( as.timeDate( seq( as.Date("2011-01-01"),
+ to=as.Date("2011-01-07"), by=1 ) ) )
2011-01-01 2011-01-02 2011-01-03 2011-01-04 2011-01-05 2011-01-06 2011-01-07
TRUE TRUE FALSE FALSE FALSE FALSE FALSE
R>
Et voici une autre approche utilisant une fonction de Rcppbdt:
R> sapply(seq(as.Date("2011-01-01"),to=as.Date("2011-01-07"), by=1),getDayOfWeek)
[1] 6 0 1 2 3 4 5
R>
R> sapply(seq(as.Date("2011-01-01"),to=as.Date("2011-01-07"), by=1),getDayOfWeek)
+ %%6 == 0
[1] TRUE TRUE FALSE FALSE FALSE FALSE FALSE
R>
La lubrider Le package a également wday()
et il y a sans aucun doute plus il; par fonctions dans d'autres packages.