# [R] a problem: factors, names, tables ..

PvR pvremort at vub.ac.be
Sun Jul 18 13:17:42 CEST 2004

```Hi all,

I am *completely* lost in trying to solve a relatively simple task.

I want to compute the relative number of occurences of an event, the data
of which sits in a large table (read from file).

I have the occurences of the events in a table 'tt'

0  2 10 11 13 14 15
15  6  1  3  8 15 10

.. meaning that event of type '0' occurs 15 times, type '2' occurs 6 times
etc.

Now I want to divide the occurence counts by the total number of events of
that type, which is given in the table tt2:

0   1   2  10  11  12  13  14  15
817 119 524  96 700  66 559 358 283

Saying that event type '0' occurred 817 times, type '1' occurs 119 times
etc.

The obvious problem is that not all events in tt2 are present in tt, which
is the result of the experiment so that cannot be changed.

What needs to be done is loop over tt, take the occurence count, and
divide that with the corresponding count in tt2.  This corresponding tt2
count is *not* at the same index in tt2, so I need a reverse lookup of the
type number.  For example:

event type 10:
occurs 1 time (from table tt)
occurs 96 times in total (from table tt2)  <- this is found by looking up
type '10' in tt2 and reading out 96

result: 1/96

I have tried programming this as follows:

tt <- table(V32[V48 == 0]) # this is taking the events I want counted
tt2 <- table(V32) # this is taking the total event count per type
type-numbers .. ?
df2 <-  as.data.frame(tt2) #same here

print(tt);
print(df);

print(tt2);
print(df2);

for( i in 1:length(tt) ) { #loop over smallest table tt
print("i:"); #index
print(i);
print( "denominator "); #corresponds to the "1" in the example
print(	 df\$Freq[i] );
denomtag = ( df\$Var1[ i ] );	# corresponds to the "10" in the example,
being the type number of the event
print("denomtag ");
print( denomtag );
print( "nominator: " );
print( df2[2][ df[1] == as.numeric(denomtag) ] );  #this fails ....
#result would then be somthing like :  denomitor / nominator
}

The problem is that the factor names that are extracted in 'denomtag' are
not usable as index in the dataframe in the last line.   I have tried
converting to numeric using 'as.numeric', but that fails since this
returns the index in the factor rather then the factor name I need from
the list.

Any suggestions .. ?   I am sure its dead simple, as always.

Thanks,

Piet (Belgium)