Chi-square test for equality of distributions: how many zeroes does it tolerate? I am comparing two groups of mutants each of which can have only one out of 21 different phenotypes. I would like to see whether distribution of these outcomes is similar between two groups. I found an online test 
 that calculates the "Chi-square test for equality of distributions" and gives me some plausible results. However, I have quite a few zeroes in this Table, so can I use chi-square in this case at all? 
Here is the table with two groups and counts of particular phenotypes:
2 1
2 3
1 6
1 4
13 77
7 27
0 1
0 4
0 2
2 7
2 3
1 5
1 9
2 6
0 3
3 0
1 3
0 3
1 0
1 2
0 1

 A: Perfectly feasible these days to do Fisher's 'exact' test on such a table. I just got p =  0.087 using Stata (tabi 2 1 \ 2 3 \ .... , exact. Execution took 0.19 seconds).
EDIT after chl's comment below (tried adding as a comment but can't format):
It works in R 2.12.0 for me, though i had to increase the 'workspace' option over its default value of 200000: 
> fisher.test(x)
Error in fisher.test(x) : FEXACT error 7.
LDSTP is too small for this problem.
Try increasing the size of the workspace.
> system.time(result<-fisher.test(x, workspace = 400000))
   user  system elapsed 
   0.11    0.00    0.11 
> result$p.value
[1] 0.0866764

(The execution time is slightly quicker than in Stata, but that's of dubious relevance given the time taken to work out the meaning of the error message, which uses 'workspace' to mean something different from R's usual meaning despite the fact that fisher.test is part of R's core 'stats' package.)
A: The usual guidelines are that the expected counts should be greater than 5, but it can be somewhat relaxed as discussed in the following article:

Campbell , I, Chi-squared and
  Fisher–Irwin tests of two-by-two
  tables with small sample
  recommendations, Statistics in
  Medicine (2007) 26(19): 3661–3675.

See also Ian Campbell's homepage.
Note that in R, there's always the possibility to compute $p$-value by a Monte Carlo approach (chisq.test(..., sim=TRUE)), instead of relying on the asymptotic distribution.
In you case, it appears that about 80% of the expected counts are below 5, and 40% are below 1. Would it make sense to aggregate some of the observed phenotypes?
