Определите ntile сгруппированной переменной по сравнению с общим фреймом данных

#r

#r

Вопрос:

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

Я пробовал ntile cumsum и аналогичные методы, но я очень злюсь из-за ошибок вывода или получаю квартиль 1 для каждого наблюдения. Я также попытался сравнить ntile с родительским фреймом данных, r это тоже не понравилось.

Я уверен, что это очень просто, но мой мозг сегодня поджарен.

 df <- tibble(ID= c("a", "b", "c", "d", "a", "b", "c", "d"),
           population = c(10, 200, 3000, 40000, 120, 220, 3300, 44000))
df <- group_by(df, ID) %>% 
  summarize(quartile = ntile(2, 4))

 

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

Вместо этого все просто отображается как 1, и я не могу понять, почему.

На что я надеюсь:

 ID quartile
a   1
b   2
c   3
d   4
 

Редактировать:

 df <- mutate(df, 
             quartile = ntile(x = population, 4))
 

дает мне правильный вывод … однако он не работает должным образом при использовании в моем фрейме данных

Комментарии:

1. поскольку вы groupby , в каждой группе есть только одно значение , так что у вас будет только 1 в качестве out put

2. Есть какие-нибудь идеи о том, как достичь моей цели?

3. У меня есть добавить ответ по этому поводу

4. У меня тоже была эта проблема. Каждый квантиль равен 1

Ответ №1:

Кажется group_by , здесь нет необходимости

 df['quartile']=ntile(df$population,4)
df
# A tibble: 4 x 3
     ID population quartile
  <chr>      <dbl>    <int>
1     a         10        1
2     b        200        2
3     c       3000        3
4     d      40000        4
 

Комментарии:

1. Вы правы в этом df, но мои фактические данные действительно должны быть сгруппированы, я думаю, вы, возможно, правы в отношении выхода из суммирования, но мне нужно сгруппировать