1

I am struggling with using the crosstab function, available at the link:

source("http://pcwww.liv.ac.uk/~william/R/crosstab.r")

I have also used the gtsummary library and converted mtcars to a tibble, then converted the vs and am columns to characters using:

library(gtsummary)
mtcars = mtcars %>% as_tibble()
mtcars = apply(mtcars %>% select(vs, am), 2, as.character)

crosstab(mtcars, row.vars = "vs")
crosstab(mtcars, row.vars = "am")

I would like to achieve the same using the apply or sapply function, without using the crosstab function's row.vars argument, which I do not know how to set.

I have tried

apply(mtcars, 2, crosstab(mtcars, row.vars = c('vs', 'am')))

But it does not work. Is there an alternative way to achieve this, even with the sapply function?

Thanks.

12666727b9
  • 1,133
  • 1
  • 8
  • 22

1 Answers1

1

Hi you almost got it right, you just got confused with the apply syntax:

You want to iterate over a list of column names (variables) instead of the dataframe and pass this as the row.vars argument.

lapply(c('vs', 'am'),\(col) crosstab(mtcars, row.vars = col))
sapply(c('vs', 'am'),\(col) crosstab(mtcars, row.vars = col),simplify = F)

The equivalent for loop would be:

for (col in c('vs', 'am')) {
  crosstab(mtcars,row.vars = col)|>print()
}

user12256545
  • 2,755
  • 4
  • 14
  • 28