Maybe this can be of some help to you. > set.seed(1234L) > d <- data.frame(v1=1:5,v2=c(0,abs(runif(4))),v3=c(runif(3),0,0),v4=0,v5=0.5) > fn <- function(x) { + y <- x + y[y==0] <- log1p(y[y==0]) + y[y>0] <- log(y[y>0]) + y + } > > d[,2:5] <- apply(d[,2:5], 2, fn) > > d v1 v2 v3 v4 v5 1 1 0.0000000 -0.1497591 0 -0.6931472 2 2 -2.1741619 -0.4458019 0 -0.6931472 3 3 -0.4743339 -4.6569103 0 -0.6931472 4 4 -0.4954860 0.0000000 0 -0.6931472 5 5 -0.4725999 0.0000000 0 -0.6931472 >
Thanks, Vijay. On Fri, Dec 29, 2017 at 2:51 PM, Daniel Furlan Amaral <dfama...@usp.br> wrote: > Dear all, > > I need to calculate log or log1p for all values (rows) in specific > columns of a data.frame with 5500 rows and 23 columns. > > When i > 0, apply log, and when i == 0, apply log1p. So I thought I > should use a for loop with a ifelse condition, log and log1p > functions. > > I have already tried many possibilities, but none solved. This is > something I tried, but the data.frame's values didn't change: > > > > tcPainelLog <- tcPainel; cols <- names(tcPainelLog[6:17]) > > for (j in cols) { > for (i in 1:length(j)) { > ifelse(tcPainelLog[[i]] > 0, log(i), log1p(i)) > } > } > > > > I would appreciate any help. > > Thank you. > > Daniel > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > -- Vijay Lulla, Ph.D. Assistant Professor, Dept. of Geography, IUPUI 425 University Blvd, CA-207C. Indianapolis, IN-46202 vlu...@iupui.edu <http://vijaylulla.com> http://vijaylulla.com [[alternative HTML version deleted]] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo