【问题标题】:Remove weekend data in a dataframe删除数据框中的周末数据
【发布时间】:2011-05-15 15:34:01
【问题描述】:

从下面的数据框中可以看出,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

【问题讨论】:

    标签: r date weekend


    【解决方案1】:

    为了完整起见,我想在blindjesse 的回答中补充一点,键入 ?weekdays 表明 R 具有适用于 posix 和 date 类型的基本函数 weekdays()、months() 和 quarters(),并且我相信是矢量化的,所以这也可以:

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

    【讨论】:

    • 乔兰谢谢。是的,我可能会去,这是一个不错的简约选择。 %in% 是什么意思?是“不在”吗?对不起,我是一个 Python 人 R 对我来说有点新。
    • %in% 真正的意思是“在”,在“属于”的意义上。
    【解决方案2】:

    将日期列转换为 POSIXlt,例如

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

    然后您可以使用

    访问星期几
    date$wday
    

    并适当地对框架进行子集化

    【讨论】:

      【解决方案3】:

      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(),毫无疑问,其他包中还有更多的 he;per 函数。

      【讨论】:

        猜你喜欢
        • 2017-06-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        • 2021-03-24
        • 2022-11-30
        相关资源
        最近更新 更多