Skip to contents

percent returns a table of percentages along with the percentage base. It will be useful in conjunction with Aggregate or genTable.

Usage

percent(x,...)
  # S3 method for default
percent(x,weights=NULL,total=!(se || ci),
      se=FALSE,ci=FALSE,ci.level=.95,
      total.name="N",perc.label="Percentage",...)
  # S3 method for logical
percent(x,weights=NULL,total=!(se || ci),
      se=FALSE,ci=FALSE,ci.level=.95,
      total.name="N",perc.label="Percentage",...)

Arguments

x

a numeric vector or factor.

weights

a optional numeric vector of weights of the same length as x.

total

logical; should the total sum of counts from which the percentages are computed be included into the output?

se

logical; should standard errors of the percentages be included?

ci

logical; should confidence intervals of the percentages be included?

ci.level

numeric; nominal coverage of confidence intervals

total.name

character; name given for the total sum of counts

perc.label

character; label given for the percentages if the table has more than one dimensions, e.g. if se or ci is TRUE.

...

for percent.mresp: one or several 1-0 vectors or matrices otherwise, further arguments, currently ignored.

Value

A table of percentages.

Examples


x <- rnorm(100)
y <- rnorm(100)
z <- rnorm(100)
f <- sample(1:3,100,replace=TRUE)
f <- factor(f,labels=c("a","b","c"))


percent(x>0)
#> Percentage          N 
#>         55        100 
percent(f)
#>   a   b   c   N 
#>  28  32  40 100 

genTable(
  cbind(percent(x>0),
        percent(y>0),
        percent(z>0)) ~ f
  )
#> , , f = a
#> 
#>             
#>              percent(x > 0) percent(y > 0) percent(z > 0)
#>   Percentage       53.57143       46.42857       46.42857
#>   N                28.00000       28.00000       28.00000
#> 
#> , , f = b
#> 
#>             
#>              percent(x > 0) percent(y > 0) percent(z > 0)
#>   Percentage         53.125         46.875         46.875
#>   N                  32.000         32.000         32.000
#> 
#> , , f = c
#> 
#>             
#>              percent(x > 0) percent(y > 0) percent(z > 0)
#>   Percentage           57.5           47.5             40
#>   N                    40.0           40.0             40
#> 

gt <- genTable(
  cbind("x > 0" = percent(x>0,ci=TRUE),
        "y > 0" = percent(y>0,ci=TRUE),
        "z > 0" = percent(z>0,ci=TRUE)) ~ f
  )

ftable(gt,row.vars=3:2,col.vars=1)
#>          Percentage    lower    upper
#> f                                    
#> a x > 0    53.57143 33.86991 72.48914
#>   y > 0    46.42857 27.51086 66.13009
#>   z > 0    46.42857 27.51086 66.13009
#> b x > 0    53.12500 34.74368 70.90602
#>   y > 0    46.87500 29.09398 65.25632
#>   z > 0    46.87500 29.09398 65.25632
#> c x > 0    57.50000 40.89006 72.95710
#>   y > 0    47.50000 31.51197 63.87199
#>   z > 0    40.00000 24.86500 56.67329

ex.data <- expand.grid(mean=c(0,25,50),sd=c(1,10,100))[rep(1:9,rep(250,9)),]
ex.data <- within(ex.data,x <- rnorm(n=nrow(ex.data),mean=ex.data$mean,sd=ex.data$sd))
ex.data <- within(ex.data,x.grp <- cases( x < 0,
                                            x >= 0 & x < 50,
                                            x >= 50 & x < 100,
                                            x >= 100
                                          ))
genTable(percent(x.grp)~mean+sd,data=ex.data)
#> , , sd = 1
#> 
#>                    mean
#>                         0  25    50
#>   x < 0              52.4   0   0.0
#>   x >= 0 & x < 50    47.6 100  52.8
#>   x >= 50 & x < 100   0.0   0  47.2
#>   x >= 100            0.0   0   0.0
#>   N                 250.0 250 250.0
#> 
#> , , sd = 10
#> 
#>                    mean
#>                         0    25    50
#>   x < 0              44.8   0.0   0.0
#>   x >= 0 & x < 50    55.2  98.8  51.6
#>   x >= 50 & x < 100   0.0   1.2  48.4
#>   x >= 100            0.0   0.0   0.0
#>   N                 250.0 250.0 250.0
#> 
#> , , sd = 100
#> 
#>                    mean
#>                         0    25    50
#>   x < 0              49.6  44.0  31.6
#>   x >= 0 & x < 50    18.4  22.0  18.0
#>   x >= 50 & x < 100  13.6  15.2  18.8
#>   x >= 100           18.4  18.8  31.6
#>   N                 250.0 250.0 250.0
#> 

Aggregate(percent(Admit,weight=Freq)~Gender+Dept,data=UCBAdmissions)
#>    Gender Dept  Admitted Rejected   N
#> 1    Male    A 62.060606 37.93939 825
#> 2  Female    A 82.407407 17.59259 108
#> 3    Male    B 63.035714 36.96429 560
#> 4  Female    B 68.000000 32.00000  25
#> 5    Male    C 36.923077 63.07692 325
#> 6  Female    C 34.064081 65.93592 593
#> 7    Male    D 33.093525 66.90647 417
#> 8  Female    D 34.933333 65.06667 375
#> 9    Male    E 27.748691 72.25131 191
#> 10 Female    E 23.918575 76.08142 393
#> 11   Male    F  5.898123 94.10188 373
#> 12 Female    F  7.038123 92.96188 341