2017-10-20 4 views
0

J'utilise les données de noms de bébé dans R pour la pratique.max ([colonne]) où nom = (chaque nom unique dans la colonne de nom) pour chaque année dans R

total_n <-babynames %>% 
    mutate(name_gender = paste(name,sex))%>% 
    group_by(year) %>% 
    summarise(total_n = sum(n, na.rm=TRUE)) %>% 
    arrange(total_n) 

bn <- inner_join(babynames,total_n,by = "year") 

df <- bn%>% 
    mutate(pct_of_names = n/total_n)%>% 
    group_by(name, year)%>% 
    summarise(pct =sum(pct_of_names)) 

La sortie dataframe ressemblait à ceci:

enter image description here

Pour chaque nom, il y a toutes les années et le pct lié pour cette année. Je suis coincé avec obtenir l'année avec le plus haut PCT pour chaque nom. Comment puis-je faire cela?

Répondre

2

Assez simple, une fois que vous savez d'où proviennent les données babynames. Vous aviez tout le nécessaire:

library(dplyr) 
library(babynames) 

total_n <-babynames %>% 
    mutate(name_gender = paste(name,sex))%>% 
    group_by(year) %>% 
    summarise(total_n = sum(n, na.rm=TRUE)) %>% 
    arrange(total_n) 

bn <- inner_join(babynames,total_n,by = "year") 

df <- bn%>% 
    mutate(pct_of_names = n/total_n)%>% 
    group_by(name, year)%>% 
    summarise(pct =sum(pct_of_names)) 

Vous avez été absent cette dernière étape:

df %>% 
    group_by(name) %>% 
    filter(pct == max(pct)) 

# A tibble: 95,025 x 3 
# Groups: name [95,025] 
     name year   pct 
     <chr> <dbl>  <dbl> 
1  Aaban 2014 4.338256e-06 
2  Aabha 2014 2.440269e-06 
3  Aabid 2003 1.316094e-06 
4 Aabriella 2015 1.363073e-06 
5  Aada 2015 1.363073e-06 
6  Aadam 2015 5.997520e-06 
7  Aadan 2009 6.031433e-06 
8 Aadarsh 2014 4.880538e-06 
9  Aaden 2009 3.335645e-04 
10 Aadesh 2011 1.370356e-06 
# ... with 95,015 more row 

group_by et filter sont vos amis.

+0

omg, ne peut pas croire que c'est aussi simple, je pensais à boucler. Je vous remercie! –

+0

N'hésitez pas à accepter la réponse, aussi! – Steven