2016-10-14 15 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(面積)%>%のsummarize(coveragePct = SUM(カバレッジ)/ 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 
関連する問題