Change dataframe values using log and if condition

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Change dataframe values using log and if condition

dfamaral
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
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Change dataframe values using log and if condition

Vijay Lulla
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 <[hidden email]>
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
> [hidden email]
> 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
[hidden email]

<http://vijaylulla.com>
http://vijaylulla.com

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo