繁体   English   中英

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

[英]Subsetting by number of observations per hour in R

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

     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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM