I like @RicardoSaporta (+1) solution, but can you also use ? prop.table :
> df<-data.frame(x1=c(1,1,0,0,1,0),x2=c("a","a","b","a","c","c")) > df x1 x2 1 1 a 2 1 a 3 0 b 4 0 a 5 1 c 6 0 c > tab <- table(df$x2, df$x1) > tab 0 1 a 1 2 b 1 0 c 1 1 > ptab <- prop.table(tab, margin=1) > ptab 0 1 a 0.3333333 0.6666667 b 1.0000000 0.0000000 c 0.5000000 0.5000000 > dframe <- data.frame(values=rownames(tab), prop=ptab[,2], count=tab[,2]) > dframe values prop count aa 0.6666667 2 bb 0.0000000 0 cc 0.5000000 1
If you want, you can combine this into one function:
getprops <- function(values, indicator){ tab <- table(values, indicator) ptab <- prop.table(tab, margin=1) dframe <- data.frame(values=rownames(tab), prop=ptab[,2], count=tab[,2]) return(dframe) } > getprops(values=df$x2, indicator=df$x2) values prop count aa 0.6666667 2 bb 0.0000000 0 cc 0.5000000 1
source share