2 votes

Regrouper toutes les lignes qui répondent à une certaine condition

J'ai le cadre de données suivant df1 :

  company_location count
  <chr>            <int>
1 DE                  28
2 JP                   6
3 GB                  47
4 HN                   1
5 US                 355
6 HU                   1

Je veux arriver à df2 :

  company_location count
  <chr>            <int>
1 DE                  28
2 GB                  47
3 US                 355
4 OTHER                8

df2 est identique à df1 mais additionne toutes les colonnes avec count<10 et les regroupe dans une ligne appelée OTHER

Existe-t-il quelque chose de ce genre ? Une fonction group_by() qui regroupe toutes les lignes qui correspondent à une condition particulière dans un groupe et qui laisse toutes les autres lignes dans des groupes qui ne contiennent qu'elles ?

4voto

Allan Cameron Points 56117

C'est ce que fct_lump_min est pour - c'est une fonction de forcats qui fait partie du tidyverse.

library(tidyverse)

df %>%
  group_by(company_location = fct_lump_min(company_location, 10, count)) %>%
  summarise(count = sum(count))

#> # A tibble: 4 x 2
#>   company_location count
#>   <fct>            <int>
#> 1 DE                  28
#> 2 GB                  47
#> 3 US                 355
#> 4 Other                8

2voto

thelatemail Points 21202

Effectuer un regroupement temporaire de variables company_location sur la base de count alors summarise :

library(dplyr)
df1 %>% 
    group_by(company_location = replace(company_location, count < 10, 'OTHER')) %>% 
    summarise(count = sum(count))

#  company_location count
#  <chr>            <int>
#1 DE                  28
#2 GB                  47
#3 OTHER                8
#4 US                 355

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X