jeudi 28 décembre 2017

Apply log and log1p to several columns with an if condition

I have a dataframe and I need to calculate log for all numbers greater than 0 and log1p for numbers equal to 0. My dataframe is called tcPainelLog and is it like this (str from columns 6:8):

$ IDD:  num  0.04 0.06 0.07 0.72 0.52 ...
$ Soil: num  0.25 0.22 0.16 0.00 0.00 ...
$ QAI:  num  0.00 0.50 0.00 0.71 0.26 ...

Therefore, I guess need to concatenate an ifelse statement with log and log1p functions. However, I tried several different ways to do it, but none has succeeded. For instance:

tcPainelLog <- tcPainel
cols <- names(tcPainelLog[,6:17]) # These are the columns I need to calculate

tcPainelLog$IDD   <- ifelse(X = tcPainelLog$IDD>0, log(X), log1p(X))

tcPainelLog[cols] <- lapply(tcPainelLog[cols], function(x) ifelse((x > 0), log(x), log1p(x)))

tcPainelLog[cols] <- if(tcPainelLog[,cols] > 0) log(.) else log1p(.)

I haven't been able to perform it and I would appreciate any help for that. I am really sorry it there is an explanation for that, I searched by many words but I didn't find it.

Best regards.

Aucun commentaire:

Enregistrer un commentaire