lundi 9 novembre 2020

What is a simple dplyr or ifelse command for applying a transformation to two groups of observations in a single data frame column?

I have ranges of doses for different fungicides. I'm log transforming these doses so that I can do linear regression. For every fungicide, a dose of 0 is used, so I add a constant to the transformations to permit graphing that 0 group. Two different constants are added (either 0.0001 or 0.001), depending on the range of doses used. My ifelse code for transforming my doses works fine, but I know there are better ways within ifelse or within dplyr.

More simply, I'd like a cleaner code which identifies the two target groups and adds their constant to the transformation accordingly. Could someone suggest a cleaner or simpler code for the sake of learning? My code:

fulldata$log.dose <- ifelse(fulldata$fungicide == "flint24", log(fulldata$dose+0.0001,10),
                      ifelse(fulldata$fungicide == "pristine24.2", log(fulldata$dose+0.0001,10),
                        ifelse(fulldata$fungicide == "flint48", log(fulldata$dose+0.001,10),
                          ifelse(fulldata$fungicide == "pristine24", log(fulldata$dose+0.001,10),
                            ifelse(fulldata$fungicide == "pristine48", log(fulldata$dose+0.001,10),
                              ifelse(fulldata$fungicide == "sylgard24", log(fulldata$dose+0.001,10), NA))))))
fulldata$log.dose <- as.numeric(fulldata$log.dose)

Aucun commentaire:

Enregistrer un commentaire