Home > OS >  How do I change 0 values in numeric data type columns to NA, without changing FALSE operators in log
How do I change 0 values in numeric data type columns to NA, without changing FALSE operators in log

Time:03-03

I want to convert all 0 numerical values in a spreadsheet to NA. The code below changes all of my 0 values in numerical columns to NA as intended, however, FALSE values in logical columns are also being changed to NA.

dataframe <- na_if(dataframe, 0)

Is there a way around this that doesn't require me splitting the data frame up into logical and numeric parts, converting 0s to NAs on the numeric data, then merging it? Thank you!

CodePudding user response:

We may have to loop across numeric columns because TRUE/FALSE are otherwise 1/0 when coerced

library(dplyr)
FibreDatabase <- FibreDatabase %>%
    mutate(across(where(is.numeric), na_if, 0))

If we check the source code of na_if

...
 x[x == y] <- NA
...

which does the conversion

> df1 <- data.frame(v1 = FALSE, v2 = c(0, 1))
> df1 == 0
       v1    v2
[1,] TRUE  TRUE
[2,] TRUE FALSE

Here, the FALSE are also coerced to 0 and it returns TRUE when we do the == as below

> df1 %>%
    mutate(across(where(is.numeric), na_if, 0))
     v1 v2
1 FALSE NA
2 FALSE  1
> na_if(df1, 0)
  v1 v2
1 NA NA
2 NA  1
  •  Tags:  
  • r
  • Related