【问题标题】:Subsetting by number of observations per hour in RR中每小时观察次数的子集
【发布时间】:2020-02-28 00:01:35
【问题描述】:

我有跨越 6 周的无线电跟踪数据,当给定时间段内的检测(即观察)数量较低时,该数据的可靠性较低。因此,我想对我的数据框进行子集化,以便从我的数据中排除少于 10 次检测的任何小时。如下图所示,一行“Power”对应一次检测。

     DateTime               Power

>  1. 2018-05-21 20:56:04    30
>  2. 2018-05-21 20:56:07    20
>  3. 2018-05-21 20:56:44    35
>  4. 2018-05-21 20:56:47    37
>  5. 2018-05-21 20:57:48    26
>  6. 2018-05-21 21:32:36    35

我知道这可能涉及首先按小时进行某种计数,我认为我已经使用下面的代码(然后生成了下面的数据框)实现了这一点,但我不确定我现在如何子集我的初始数据框有了这些计数。

Tag201 %>% 
    count(Date1 = as.Date(DateTime), Hour = hour(DateTime)) %>%
    group_by(Date1) %>% 
    complete(Date1, Hour = min(Hour):24, fill = list(n = 0)) %>%
    arrange(Date1, Hour)

 Date1       Hour     n
  <date>     <int> <dbl>
1 2018-05-19     0   402
2 2018-05-19     1     4
3 2018-05-19     2   501
4 2018-05-19     3   858
5 2018-05-19     4   192
6 2018-05-19     5    19

任何帮助将不胜感激。

编辑:

我设法用下面的代码做到了这一点:

Tag201 <- Tag201 %>%
  group_by(Date=floor_date(DateTime, "1 hour")) %>%
  mutate(c1=length(Power))

tt <- table(Tag201$c1)
Tag201 <- subset(Tag201, c1 %in% names(tt[tt >10]))

【问题讨论】:

    标签: r count time-series subset


    【解决方案1】:

    您应该包含数据的 dput 版本,以便我们测试我们对您问题的回答。我认为你可以这样做:

    Tag201 %>% 
        mutate(Date1 = as.Date(DateTime) %>%
        mutate(Hour = hour(DateTime) %>%
        group_by(Date1, Hour) %>%
        mutate(n = n() %>%
        ungroup() %>%
        group_by(Date1) %>% 
        complete(Date1, Hour = min(Hour):24, fill = list(n = 0)) %>%
        ungroup() %>%
        arrange(Date1, Hour) %>%
        filter(n > 10) 
    

    【讨论】:

    • 非常感谢您的回复,很抱歉没有在我的数据中包含 dput 版本 - 这是我的第一个问题!您的代码有效,谢谢。在收到您的回复之前,我实际上已经成功地做到了——我在编辑中包含了我的做法。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    相关资源
    最近更新 更多