1
votes

I am trying to use tapply() for some descriptive analysis, with the mtcars dataset in R.

So the problem is:

> table(mtcars$carb)

 1  2  3  4  6  8 
 7 10  3 10  1  1 
> tapply(mtcars$carb,list(mtcars$vs,mtcars$am),function(x){length(x)})
   0 1
0 12 6
1  7 7

The above line worked, but the line below didnt:

> tapply(mtcars$carb,list(mtcars$vs,mtcars$am),function(x){table(x)})
  0         1        
0 Integer,3 Integer,4
1 Integer,3 Integer,2

By using tapply on mtcars$carb, I expect to get the table for each of the four combinations from vs and am. Any idea what went wrong? Thank you very much.

2
table(mtcars$carb, mtcars$vs, mtcars$am)? - d.b

2 Answers

0
votes

The calculation is already done by tapply but it is not available in easy to view form. You can wrap the output of table in list.

tapply(mtcars$carb,list(mtcars$vs,mtcars$am),function(x) list(table(x)))

#[[1]]
#x
#2 3 4 
#4 3 5 

#[[2]]
#x
#1 2 4 
#3 2 2 

#[[3]]
#x
#2 4 6 8 
#1 3 1 1 

#[[4]]
#x
#1 2 
#4 3 

Or using lapply :

temp <- tapply(mtcars$carb,list(mtcars$vs,mtcars$am),table)
lapply(temp, I)
0
votes

We can do this with fable

ftable(mtcars[c('carb', 'vs', 'am')])