Подмножество по количеству наблюдений в час в R - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть данные радиотрекинга, охватывающие 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]))

1 Ответ

0 голосов
/ 01 ноября 2019

Вы должны включить версию ваших данных для 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) 
...