Удалить данные выходного дня в кадре данных

Как видно из фрейма данных ниже, RBloomberg возвращает NA для выходных дней.

Я хочу удалить всю строку, если она приходится на выходные. Как бы я это сделал?

Я не хочу использовать na.omit, так как это может удалить строки дней недели, если/когда я получу NA в данных по уважительной причине.

   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

person Thomas Browne    schedule 15.05.2011    source источник


Ответы (3)


Преобразуйте столбец даты в POSIXlt, например

date <- as.POSIXlt(date,format="%Y-%m-%d")

Затем вы можете получить доступ к дню недели, используя

date$wday

и подставить кадр соответствующим образом

person blindjesse    schedule 15.05.2011

Для полноты картины я бы добавил к ответу blinkjesse, что ввод ?weekdays показывает, что R имеет базовые функции weekdays(),months() и кварталы(), которые работают как с типами posix, так и с датами, и я считаю, что они векторизованы, так что это также будет работать:

!(weekdays(as.Date(date)) %in% c('Saturday','Sunday'))
person joran    schedule 15.05.2011
comment
Джоран спасибо. Да, я могу пойти, это хорошая экономичная альтернатива. Что означает %в%? Это не в? Извините, я парень Python R немного новичок для меня. - person Thomas Browne; 16.05.2011
comment
%in% на самом деле означает «в», в смысле «принадлежит». - person lindelof; 16.05.2011

Ответ слепого Джесси правильный и полезный, поскольку он возвращается к базовым функциям R.

Многие пакеты имеют дополнительные вспомогательные оболочки. Вот один из timeDate, который требует преобразования в его тип:

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> 

а вот еще один подход с использованием функции из 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> 

В пакете lubridate также есть wday(), а в других пакетах, несомненно, больше he;per функций.

person Dirk Eddelbuettel    schedule 15.05.2011