2014-01-13 6 views
0

그룹을 포함하는 행 (1) 및 그룹 (0)을 포함하는 행의 백분율을 계산하는 가장 간단한 방법은 무엇입니까?집계하여 그룹당 0이 아닌 행의 백분율을 계산하십시오.

다음
dat <- structure(list(rs = c(0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0), group = c(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 1, 1, 1, 1, 1, 1)), .Names = c("rs", "group"), row.names = c(NA, 
-62L), class = "data.frame") 

내가 지금까지있어 무엇 : 여기

는 몇 가지 작은 예제 데이터입니다 (웃음하지 않습니다!) : 잘 작동 어떤

require(plyr)  
tab <- as.data.frame(table(dat)) 
dc <- dcast(tab, group ~ rs) 
dc <- dc[,-1] 
dc[] <- lapply(dc, as.numeric) 
data.frame(prop.table(as.matrix(dc), 1)) 

:

  X0   X1 
1 1.0000000 0.00000000 
2 0.8787879 0.12121212 
3 0.9285714 0.07142857 

하지만 타이핑이 덜 필요한 방법이 있다고 확신합니다.

plyrdata.table으로 해결하십시오.

답변

1

table 거의 원하는대로 수행합니다. 그 합 값들의 각 세트를 나눈 비율로 변환 :

t(apply(table(dat), 2, function(x) x/sum(x))) 

## group   0   1 
##  1 1.0000000 0.00000000 
##  2 0.8787879 0.12121212 
##  3 0.9285714 0.07142857 
+0

긍정, 즉 함께 (좋은 짧은 방법 덕분 – Ben

+1

'를 t (prop.table이다 (DAT 테이블 (RS, 기)), 2)) '를 변형으로 사용합니다. – thelatemail

관련 문제