[R] new R-user needs help

(Ted Harding) Ted.Harding at nessie.mcc.ac.uk
Wed Oct 18 13:17:24 CEST 2006


On 18-Oct-06 antoniababe at yahoo.se wrote:
> Dear all,
> 
> I have a dataset 
> 
> Exp name id x1 x2 x3 x4 x5 
> 1   a    1  23 24 23 22 30
> 1   b    2  25 26 27 23 24
> 1   c    3  32 19 23 25 28
> 2   a    4  28 32 24 26 27
> 2   b    5  23 24 25 26 28
> 2   c    6  23 31 30 38 23
> 3   a    7  24 25 31 27 29
> 3   b    8  28 25 26 32 28 
> 3   c    9  21 31 28 23 29
> 
> where each name a,b and c is repeated three times.
> Now I want to calculate the the averages of a,b and c
> over the three experiments for each x. For example for
> x1 I want to calculate the average of a like
> 
> [a(from exp1) + a(exp2)+ a(exp3)]/3= (23+28+24)/3
> 
> How can I do that ?

The solution given by Dimitris may seem mysterious fo
a "new R-user". More transparent is the following kind
of thing.

Suppose (as in Dimitris' solution) your data are in a
dataframe called "dat".

Then, for example,

  mean(dat$x1[dat$name=="a"])
  [1] 25

which selects the values of x1 for which the name is "a".

You can similarly cycle through all the variables x1,...,x5:

  for(i in (4:8)){print(mean(dat[(name=="a"),i]))}
  [1] 25
  [1] 27
  [1] 26
  [1] 25
  [1] 28.66667

where dat[(name=="a"),i] selects rows of 'dat' according to
the value of 'name' and columns according to values of i
(x1: i=4, ... ,x5: i=8).

This more direct and transparent way of defining access to
different elements of the dataframe makes it much easier
to carry out different kinds of calculation.

Hoping this helps,
Ted.

--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 18-Oct-06                                       Time: 12:17:20
------------------------------ XFMail ------------------------------



More information about the R-help mailing list