Как сгруппировать по определенному столбцу и выбрать верхний 80 процентиль на основе другого столбца в R - PullRequest
1 голос
/ 22 февраля 2020

Я пытаюсь выполнить группирование, а затем в этой группе, выбирая верхнее значение 85 процентиля из определенного столбца и получая все записи.

Я использую запрос ниже, это работает, но когда я пытаюсь запустить для 100 миллионов строк это занимает часы и все еще не дает результатов.

o <- r %>% 
  select(everything()) %>%
  group_by(loan_num_srvcr) %>%
  filter(diff_in_date > quantile(diff_in_date, .85))

другой подход

k <- r[ave(1:nrow(r), r$loan_num_srvcr, FUN = seq_along) <= r$diff_in_date, ]

другой подход

кто-то предложил мне сгруппировать, а затем разделить на каждую группу и получить результат, а затем rbind все строки, я пытался, но не получил желаемых результатов в ограниченные сроки.

1 Ответ

2 голосов
/ 22 февраля 2020
library(data.table)

setDT(r)

system.time({
      r[, Q85 := quantile(diff_in_date, .85), by=loan_num_srvcr][diff_in_date > Q85]
   })
user  system elapsed 
5.02    0.51    4.94

dim(r)
[1] 100000000        3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...