R метод суммирования вектора до определенного квантиля (ов) - PullRequest
0 голосов
/ 18 марта 2020

У меня есть данные, относящиеся к 36 интересующим регионам (ROI), ок. 380 пикселей на ROI. Мои данные выглядят так:

      ROI_name    T_K
1   bt_full_05 303.88
1.1 bt_full_05 303.93
1.2 bt_full_05 303.72
1.3 bt_full_05 303.43
1.4 bt_full_05 302.93
1.5 bt_full_05 302.93
...
36.362 bt_full_40 301.65
36.363 bt_full_40 301.47
36.364 bt_full_40 301.52
36.365 bt_full_40 302.02
36.366 bt_full_40 303.28
36.367 bt_full_40 303.78

Я хочу вычислить среднее значение T_K для каждой ROI, но отфильтровать значения ниже заданного квантиля, например, 0,25, и вывести среднее значение до этого квантиля. В идеале я мог бы сообщить среднее значение T_K для нескольких квантилей, 0,1, 0,25, 0,5 ... У меня есть:

groupquant <- cleared_data %>% group_by(ROI_name) %>% 
  summarise(quants = quantile(T_K, 0.1))

, что дает мне квантили. Но это

groupquant <- cleared_data %>% group_by(ROI_name) %>% 
  filter(cleared_data$T_K <= quantile(T_K, 0.1)) #%>% 

бросков

Ошибка: результат должен иметь длину 392, а не 14082

Я никуда не денусь! Ура, Андрей.

1 Ответ

0 голосов
/ 18 марта 2020

Я думаю, что пример данных немного мал, чтобы продемонстрировать, что вы хотите сделать. Поэтому я создал свои собственные данные, которые называются foo. Для каждого ROI_name я удалил некоторые данные с помощью filter(). Все значения, которые меньше quantile(T_K, 0.25), удаляются. Затем я решил взять значения для двух квантильных точек (то есть 0,5 и 0,75). В части summarize() я получаю вектор с двумя значениями чисел c и создаю фрейм данных для каждой группы. Наконец, я использовал unnest() для создания окончательного результата.

library(tidyverse)

set.seed(111)

foo <- tibble(ROI_name = rep(c("bt_full_05", "bt_full_40", "bt_full_2"), each = 30),
              T_K = runif(n = 90, min = 0, max = 300))

group_by(foo, ROI_name) %>% 
filter(T_K > quantile(T_K, 0.25)) %>% 
summarize(temp = list(enframe(quantile(x = T_K, prob = c(0.5, 0.75)),
                              name = "percentile"))) %>% 
unnest(temp)

  ROI_name   percentile value
  <chr>      <chr>      <dbl>
1 bt_full_05 50%         157.
2 bt_full_05 75%         183.
3 bt_full_2  50%         157.
4 bt_full_2  75%         229.
5 bt_full_40 50%         192.
6 bt_full_40 75%         237.
...