[R] table command

Marc Schwartz marc_schwartz at me.com
Sat Apr 24 16:20:42 CEST 2010


On Apr 24, 2010, at 8:59 AM, Shubha Vishwanath Karanth wrote:

> Hi,
> 
> 
> 
> Let s be a dataframe. 
> 
> 
> 
>> s
> 
>   A B C
> 
>   0 0 1
> 
>   1 0 1
> 
>   1 0 1
> 
>   0 0 1
> 
>   1 0 1
> 
>   0 1 1
> 
>   0 1 1
> 
>   0 1 1
> 
>   0 0 1
> 
> 
> 
>> tab1=table(s[,c(1,2)])
> 
>> tab1
> 
>   B
> 
> A   0 1
> 
>  0 3 3
> 
>  1 3 0
> 
> 
> 
>> tab2=table(s[,c(1,3)])
> 
>> tab2
> 
>   C
> 
> A   1
> 
>  0 6
> 
>  1 3
> 
> 
> 
> 
> 
> The problem is I need to access frequency corresponding to (0,0).
> tab1[1] will give me the correct value while tab2[1] will not give the
> frequency which I expected. So, is there a possibility in the table
> command to have the order of tab1 and tab2 being equal? (here 2*2). May
> be by filling in the appropriate value as 0 or NA?
> 
> 
> 
> Thanks,
> 
> Shubha


In this case, 'C' has no 0's, so that value is not considered in the tabulation in the second table. 

If you coerce each column to a factor with common levels, then you can obtain consistent formats for the output of table. Even though there are no 0's in 'C', that 'C' as a factor now has levels of 0 and 1, they will both be included in the table() output.


s.new <- data.frame(lapply(s, factor, levels = 0:1))

> str(s.new)
'data.frame':	9 obs. of  3 variables:
 $ A: Factor w/ 2 levels "0","1": 1 2 2 1 2 1 1 1 1
 $ B: Factor w/ 2 levels "0","1": 1 1 1 1 1 2 2 2 1
 $ C: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2

> s.new
  A B C
1 0 0 1
2 1 0 1
3 1 0 1
4 0 0 1
5 1 0 1
6 0 1 1
7 0 1 1
8 0 1 1
9 0 0 1


> table(s.new[, c(1, 2)])
   B
A   0 1
  0 3 3
  1 3 0

> table(s.new[, c(1, 3)])
   C
A   0 1
  0 0 6
  1 0 3


See ?factor, ?lapply and ?data.frame

HTH,

Marc Schwartz



More information about the R-help mailing list