# [R] Count or summary data

Marc Schwartz MSchwartz at mn.rr.com
Fri Dec 30 16:10:37 CET 2005

```On Fri, 2005-12-30 at 15:47 +0100, Xiyan Lon wrote:
> Dear all,
> I want to summary and count my data something like
> > te.Ce
>       [,1] [,2]
>  [1,]   -1 0.05
>  [2,]    1 0.05
>  [3,]    1 0.00
>  [4,]    0 0.05
>  [5,]   -1 0.00
>  [6,]    0 0.10
>  [7,]    1 0.10
>  [8,]   -1 0.00
>  [9,]   -1 0.10
> [10,]    0 0.05
> [11,]    0 0.10
> [12,]   -1 0.10
> [13,]    1 0.00
> [14,]   -1 0.05
> [15,]    1 0.00
>
> How could I count (summary) all my data which I need the result like
>
> for 0.05
> -1  0  1
>  2  2  1
>
> for 0.00
> -1  0  1
>  2  0  3
>
> for 0.10
> -1  0  1
>  2  2  1
>
> I have tried with summary but I did not find what I need.
> Maybe someone could help me.
> Happy new year.
> Xiyan Lon

There are several options, depending upon the output format you require.

The easiest is probably to use table() to generate a crosstabs of the
two columns:

> table(te.Ce[, 2], te.Ce[, 1])

-1 0 1
0     2 0 3
0.05  2 2 1
0.1   2 2 1

Then, there are by() and tapply(), each of which subsets the matrix by
the value in the second column, resulting in the following:

> by(te.Ce[, 1], te.Ce[, 2], table)
INDICES: 0

-1  1
2  3
------------------------------------------------------
INDICES: 0.05

-1  0  1
2  2  1
------------------------------------------------------
INDICES: 0.1

-1  0  1
2  2  1

> tapply(te.Ce[, 1], te.Ce[, 2], table)
\$"0"

-1  1
2  3

\$"0.05"

-1  0  1
2  2  1

\$"0.1"

-1  0  1
2  2  1

See ?table, ?by and ?tapply for more information.

HTH,

Marc Schwartz

```