2016-10-14 2 views
0

모든 행에 대한 비율 계산에 사용 조건에 따라 집계 분모 :R - 같이 내가 데이터를

population <- c(101:110) 
coverage <- c(91:100) 
area <- c("Cambridge", "Cambridge","Cambridge", "Cambridge","Cambridge", "Oxford", "Oxford","Oxford", "Oxford","Oxford") 
all <- data.frame(population,coverage,area) 
그때 인구의 비율을 계산하는 R 코드의 깔끔한 조각을 원하는

모바일 범위가있는 영역 내에서

coverage <- population x (coverage/100)/(aggregate(population, by=area, FUN=sum)) 

가 어떻게 모든 행에 대한 비율 계산에서 분모로 사용하기 위해, 지역에 따라 인구의 합을 계산합니까 : 나는이 같은 (그러나이) 알고? 일반적으로 집계를 사용하여 면적을 기준으로 인구를 구한 다음이를 다시 데이터 프레임과 병합하여 분모로 사용하지만 매우 우아하지는 않습니다. 데이터가 다음과 같이 표시되기를 바랍니다.

population <- c(101:110) 
coverage <- c(91:100) 
area <- c("Cambridge", "Cambridge","Cambridge", "Cambridge","Cambridge", "Oxford", "Oxford","Oxford", "Oxford","Oxford") 
percentage <- c(18, 18, 18, 18, 18, 19, 19, 19, 19, 19) 
all <- data.frame(population,coverage,area, percentage) 

도움을 주시면 감사하겠습니다.

+0

원하는 출력의 영역에 대해 행마다 백분율이 같지 않아야합니다. – aichao

답변

0

당신은 area에 의해 계산을 그룹화 dplyr를 사용할 수 있습니다

library(dplyr) 
all %>% group_by(area) %>% mutate(percentage=population*(coverage/100)/sum(population)) 
##Source: local data frame [10 x 4] 
##Groups: area [2] 
## 
## population coverage  area percentage 
##  <int> <int> <fctr>  <dbl> 
##1   101  91 Cambridge 0.1784660 
##2   102  92 Cambridge 0.1822136 
##3   103  93 Cambridge 0.1860000 
##4   104  94 Cambridge 0.1898252 
##5   105  95 Cambridge 0.1936893 
##6   106  96 Oxford 0.1884444 
##7   107  97 Oxford 0.1922037 
##8   108  98 Oxford 0.1960000 
##9   109  99 Oxford 0.1998333 
##10  110  100 Oxford 0.2037037 
+0

나는 그가 옥스포드 대 케임브리지의 전반적인 pct를 원한다고 생각합니까? – Joy

0

을 당신이에 대한 요약 dplyr 싶은 생각합니다.

원하는 결과를 얻을 수 있습니까?

라이브러리 (dplyr) 모든 %> % GROUP_BY (지역) %> % 요약한다 (coveragePct = SUM (적용 범위)/합계 (인구))

+0

이렇게 선택한 경우 다시 주 데이터 프레임에 병합 할 수 있습니다. 나는 네 의도가 맞았다 고 생각해. – Joy

0

당신은 dplyr으로이 작업을 수행 할 수 있습니다

all.summary <- all %>% 
    group_by(area) %>% 
    mutate(percentage = population/sum(population)*(coverage/100)) 
all.summary 


    population coverage  area percentage 
     <int> <int> <fctr>  <dbl> 
1   101  91 Cambridge 0.1784660 
2   102  92 Cambridge 0.1822136 
3   103  93 Cambridge 0.1860000 
4   104  94 Cambridge 0.1898252 
5   105  95 Cambridge 0.1936893 
6   106  96 Oxford 0.1884444 
7   107  97 Oxford 0.1922037 
8   108  98 Oxford 0.1960000 
9   109  99 Oxford 0.1998333 
10  110  100 Oxford 0.2037037 
관련 문제