2016-06-03 2 views
-1

I는 다음과 같습니다 데이터 집합이 있습니다, 나는 전체의 비율을 계산하고 싶지만, 합계 행에

우편 번호 AGIBand NumReturns
94022 총 9530
94022 under25 1850
94022을 25to500 890
50to75 94,022 730 94,022
75to100 570
100to200 1,690 94,022 94,022
over200 3800
총 94,024 10,790 01 23, 94,024 under25 2170
94,024 25to500 900
94,024 50to75 820
94,024 75to100 650
94,024 100to200 1970
94024는 over200 4280

(죄송 서식 - 내가 여기 새로 왔어)

각 우편 번호에 대해 %의 합계를 갖는 열을 추가하고 싶습니다. 예 :

94022 | 25 세 미만 | 1850 | 총 비율 = 1850/9530

R에서 어떻게 할 수 있습니까? 감사!

답변

0

가정 데이터는 dataframe 'DAT'에있다 : 우리는 data.table을 사용할 수 있습니다

zipCodes <- unique(dat$ZipCode) 
totalRows <- dat$AGIBand == "Total" 

for (z in zipCodes){ 
    zipRows <- (dat$ZipCode == z) 
    zipTotalRow <- totalRows & zipRows 
    zipTotal <- dat$NumReturns[zipTotalRow] 
    dat$Percentage[zipRows] <- dat$NumReturns[zipRows]/zipTotal 
} 
0

. 'data.frame'을 'data.table'(setDT(df1))로 'ZipCode'로 그룹화하고, 'NumReturns'를 'AGIBand'의 Total에 해당하는 'NumReturns'로 나누고 새로운 열로 ':=' 퍼크 '.

library(data.table) 
setDT(df1)[, Perc := 100*(NumReturns/NumReturns[AGIBand=="Total"]) , by = ZipCode] 
df1 
# ZipCode AGIBand NumReturns  Perc 
# 1: 94022 Total  9530 100.000000 
# 2: 94022 under25  1850 19.412382 
# 3: 94022 25to500  890 9.338930 
# 4: 94022 50to75  730 7.660021 
# 5: 94022 75to100  570 5.981112 
# 6: 94022 100to200  1690 17.733473 
# 7: 94022 over200  3800 39.874082 
# 8: 94024 Total  10790 100.000000 
# 9: 94024 under25  2170 20.111214 
#10: 94024 25to500  900 8.341057 
#11: 94024 50to75  820 7.599629 
#12: 94024 75to100  650 6.024096 
#13: 94024 100to200  1970 18.257646 
#14: 94024 over200  4280 39.666358 
관련 문제