2017-10-20 6 views
0

연습용으로 R의 아기 이름 데이터를 사용하고 있습니다.max ([column]) 여기서 name = (이름 열의 각 고유 이름) 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)) 

dataframe 출력은 다음과 같이보고 : 각 이름에 대한

enter image description here

이,이 모든 년, 그리고 그 해 관련 PCT. 나는 각 이름에 대해 가장 높은 pct로 한해를 얻는 데 매달렸다. 어떻게해야합니까?

답변

2

어디 까지나 babynames 데이터의 출처를 알면 매우 간단합니다. 당신은 모든 것을 필요로했다 :

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_byfilter이 당신의 친구 :

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)) 

당신은 마지막 단계를 실종되었다.

+0

mg, 그게 그렇게 간단하다고 생각할 수 없다. 나는 루핑을 생각하고 있었다. 고맙습니다! –

+0

답변을 받아도 좋습니다. – Steven