티스토리 뷰

R에서는 비율을 구하는 방법이 여러가지 있는데요 그중에서도 matrix 테이블을 한번에 proportion 테이블로 변환시키는 작업을 많이 하게 됩니다. 이때 가장 편하게 사용하는게 prop.table() 함수입니다.

 


# 연습용 데이터 셋 만들기

> mydata <- matrix(sample(100,15),ncol = 3)
> colnames(mydata) <- LETTERS[seq(1,3)]
> rownames(mydata) <- sprintf('sector-%d',seq(5))
> head(mydata)
          A  B  C
sector-1 22 21 25
sector-2 81 32 39
sector-3 88 57 52
sector-4 86  8 46
sector-5 63  7 33

# prop.table(x)  :  sum() == 1

> prop.table(mydata)
                  A          B          C
sector-1 0.03333333 0.03181818 0.03787879
sector-2 0.12272727 0.04848485 0.05909091
sector-3 0.13333333 0.08636364 0.07878788
sector-4 0.13030303 0.01212121 0.06969697
sector-5 0.09545455 0.01060606 0.05000000
> prop.table(mydata) %>% sum
[1] 1

prop.table에서 margin값을 주지 않으면 전체합이 1이 되는 비율 테이블을 얻을 수 있습니다.


# prop.table(x, margin=1)  :  rowSums()  = 1

> prop.table(mydata,1)
                 A          B         C
sector-1 0.3235294 0.30882353 0.3676471
sector-2 0.5328947 0.21052632 0.2565789
sector-3 0.4467005 0.28934010 0.2639594
sector-4 0.6142857 0.05714286 0.3285714
sector-5 0.6116505 0.06796117 0.3203883
> prop.table(mydata,1) %>% rowSums
sector-1 sector-2 sector-3 sector-4 sector-5 
       1        1        1        1        1 

margin=1값을 주면, rowSums이 1이 되는 비율 테이블을 얻을 수 있습니다. 연습데이터에서는 각 sector별로 A, B, C의 합이 1이 되는 값이 되겠습니다.


# prop.table(x, margin=2)  :  colSums() = 1

> prop.table(mydata,2)
                  A     B         C
sector-1 0.06470588 0.168 0.1282051
sector-2 0.23823529 0.256 0.2000000
sector-3 0.25882353 0.456 0.2666667
sector-4 0.25294118 0.064 0.2358974
sector-5 0.18529412 0.056 0.1692308
> prop.table(mydata,2) %>% colSums
A B C 
1 1 1 

margin=2값을 주면, colSums이 1이 되는 비율 테이블을 얻을 수 있습니다. 연습데이터에서는 A, B, C각각의 sector 합이 1이 되는 비율이 되겠습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함