Skip to content

transforming data based on factors in a dataframe

3 messages · Carly Huitema, jim holtman, David Winsemius

#
Hello R-help list,

I would really appreciate help with my factoring problem.

My generated data is this:

df <- expand.grid(T=seq(10,80, by=5), conc=rep(c(1, 3, 7), 2))
df$curve <- as.factor(rep(1:6, each=length(seq(10,80, by=5))))
df$counts <- 3*df$T/df$conc + rnorm(df$T,0,2)

plot(counts~T, df)


What I would like to do add a new column to the dataframe of zeroed
data (say df$counts.zeroed). For each curve (designated by factor
df$curve) I want to take the value in counts and subtract the minimum
value for that curve. However, I don't really have an idea of how to
approach this problem and haven't found anything in my searches.

And just as a second question, my second line of code assigns the
factors, but if there is a nicer way of doing this I would really
appreciate knowing how.

Thanks for any help!
Carly
#
try this:  (uses 'ave')
T conc curve      counts       zero
1  10    1     1  30.4148210   0.000000
2  15    1     1  43.2169594  12.802138
3  20    1     1  64.3876491  33.972828
4  25    1     1  75.2957249  44.880904
5  30    1     1  95.4479888  65.033168
6  35    1     1 103.5814348  73.166614
7  40    1     1 121.0131061  90.598285
8  45    1     1 135.8270827 105.412262
9  50    1     1 152.7179565 122.303136
10 55    1     1 165.2928662 134.878045
11 60    1     1 181.1899238 150.775103
12 65    1     1 197.8600462 167.445225
13 70    1     1 210.0112723 179.596451
14 75    1     1 224.1807064 193.765885
15 80    1     1 237.5717249 207.156904
16 10    3     2   8.2411801   0.000000
17 15    3     2  14.7415660   6.500386
18 20    3     2  20.9944483  12.753268
19 25    3     2  23.4369433  15.195763
On Wed, Apr 25, 2012 at 10:57 AM, Carly Huitema <carly.huitema at gmail.com> wrote:

  
    
#
On Apr 25, 2012, at 10:57 AM, Carly Huitema wrote:

            
translated to R that request would be something along these minimally  
tested lines:

df$counts.zeroed <- with( df, ave(counts, curve, FUN=function(x){ x- 
min(x) }) )
There is a `gl` function that I think creates grouping factors, but I  
generally use `rep` because I understand it better.
David Winsemius, MD
West Hartford, CT