用R中每小时的观察数子集

时间:2019-11-01 17:34:47

标签: r count time-series subset

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

     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]))

1 个答案:

答案 0 :(得分:0)

您应该包括数据的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)