[R] how to get such crosstable?
Gabor Grothendieck
ggrothendieck at gmail.com
Thu Jun 23 22:59:41 CEST 2005
On 6/23/05, Marc Schwartz <MSchwartz at mednetstudy.com> wrote:
> On Thu, 2005-06-23 at 23:22 +0800, ronggui wrote:
> > i use the CrossTable (frome gregmic package) function to get such a
> > table as below.
> > but the percentage of the non-NA levels(here 1,2,3,4,5) is not totally
> > 100%.
> >
> > is there any way to get a table that percentage of the non-NA
> > levelsis totally 100%,as the SPSS' valid percentage.thank you!
> >
> >
> >
> > Cell Contents
> > |-------------------------|
> > | Count |
> > | Row Percent |
> > |-------------------------|
> >
> > Total Observations in Table: 650
> >
> > | 1 | 2 | 3 | 4 | 5
> > |
> >
> > |-----------|-----------|-----------|-----------|-----------|
> > | 169 | 294 | 151 | 31 | 5
> > |
> > | 0.260% | 0.452% | 0.232% | 0.048% | 0.008%
> > |
> >
> > |-----------|-----------|-----------|-----------|-----------|
> >
> > Number of Missing Observations: 4 (0.6116208%)
>
>
> I may be misunderstanding what you are referring to, but I am guessing
> that it is that the output is showing proportions, even thought the "%"
> symbol is there?
>
> I am not familiar with SPSS' output (Dirk Enzmann contributed the SPSS
> output format code to CrossTable), but a quick look suggests that it
> works properly in a 2d table, but there is a bug when the object to be
> tabulated is 1d, in that the multiplication by 100 is not done in the
> SPSS output sub-function.
>
> The ability to tabulate a 1d object was added independent of Dirk's
> code, so it looks as if this was missed.
>
> If correct, I can review that and include that as an update, along with
> the prior modification to Greg and Nitin.
>
In the interim, here is a workaround. The function
SPSSCrossTable below defines
- the format argument to be set to "SPSS"
- a local version of prop.table which gets multiplied
by 100 (since looking inside CrossTable we see that
the proportions come from prop.table).
- a local version of CrossTable whose environment is
set so that it finds the local prop.table before
the one in base
Finally the do.call runs the local CrossTable:
SPSSCrossTable <- function(...) {
args <- list(...)
args$format <- "SPSS"
prop.table <- function(...) 100*base::prop.table(...)
environment(CrossTable) <- environment()
do.call("CrossTable", args)
}
SPSSCrossTable(c(1,1,2,NA)) # test
Note that the above should only be used in cases where the
proportions in CrossTable are incorrectly not multiplied by 100.
More information about the R-help
mailing list