Извлечение аномальных интервалов из фрейма данных - PullRequest
1 голос
/ 16 апреля 2020

У меня большой набор данных, в котором я пытаюсь извлечь интервалы (из столбца Zone), где значение Anom> 1 для 5+ последовательных ячеек, и рассчитать среднее значение для каждого интервала. В приведенном ниже примере я хотел бы извлечь информацию о том, что интервалы Anom включают зоны от 5 до 11 и от 17 до 26, но игнорируя от 28 до 29 (так как количество последовательных ячеек <5). Любая помощь очень ценится. </p>

 df <-  data.frame("Zone" = 1:30, "Anom" = 1:30)
 df[,2] <- 0
 df[5:11,2] <- 1
 df[17:26,2] <- 1
 df[28:29,2] <- 1

df

   Zone Anom
1     1    0
2     2    0
3     3    0
4     4    0
5     5    1
6     6    1
7     7    1
8     8    1
9     9    1
10   10    1
11   11    1
12   12    0
13   13    0
14   14    0
15   15    0
16   16    0
17   17    1
18   18    1
19   19    1
20   20    1
21   21    1
22   22    1
23   23    1
24   24    1
25   25    1
26   26    1
27   27    0
28   28    1
29   29    1
30   30    0

Вид вывода, который я хотел бы генерировать

1 Zone.From Zone.To Anom.Mean
2 5         11      1
3 17        26      1

1 Ответ

1 голос
/ 16 апреля 2020

Одним из способов использования dplyr и data.table rleid является создание новой группы для каждого изменения в Anom. Для каждой группы получите first и last значение Zone, mean из Anom, количество строк в ней и first значение Anom. Тогда мы можем filter и сохранить только те группы, в которых у нас больше, чем равно 5 строкам, а Anom больше, чем 0.

library(dplyr)

df %>%
  group_by(grp = data.table::rleid(Anom)) %>%
  summarise(Zone.From  = first(Zone), 
            Zone.To = last(Zone), 
            mean_anom = mean(Anom), 
            N = n(), 
            Anom = first(Anom)) %>%
  filter(Anom > 0 & N >= 5) %>%
  select(-c(grp, N, Anom))

#  Zone.From Zone.To mean_anom
#      <int>   <int>     <dbl>
#1         5      11         1
#2        17      26         1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...