2011-05-15 36 views
5

您可以從下面的數據框中看到,RBloomberg在週末日期返回NAs。從R數據框中刪除週末數據

我想刪除整個行,如果它在週末。我將如何做到這一點?

我不想使用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 

回答

18

轉換日期列到POSIXlt,如

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

然後你使用

date$wday 

可以訪問一週的一天,子集框架適當

+0

謝謝blindJesse完美的作品。 – 2011-05-15 18:00:07

4

的回答blindJesse是正確和有用的,因爲它回落到基本的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()和毫無疑問的是他越;每個函數在其他包中。

+0

謝謝德克我會通過這個來提高我對R – 2011-05-15 18:00:24

12

爲了完整起見,我想補充一下blindjesse的答案:打字?週日顯示R有基本功能weekdays(),months()和quarters(),它們都適用於posix和date類型,我相信矢量化,所以這將工作以及:

!(weekdays(as.Date(date)) %in% c('Saturday','Sunday')) 
+0

的理解,謝謝。是的,我可以去這是一個很好的吝嗇的選擇。 %的百分比是什麼意思?那是「不在」?對不起,我是一個Python傢伙R對我來說有點新鮮。 – 2011-05-15 20:05:00

+0

%以%表示「屬於」意義上的「in」。 – lindelof 2011-05-15 20:13:57