# Replace all 0 values to NA

###### Posted By: Anonymous

I have a dataframe with some numeric columns. Some row has a 0 value which should be considered as null in statistical analysis. What is the fastest way to replace all the 0 value to NULL in R?

## Solution

Replacing all zeroes to NA:

```
df[df == 0] <- NA
```

**Explanation**

**1.** It is not `NULL`

what you should want to replace zeroes with. As it says in `?'NULL'`

,

NULL represents the null object in R

which is unique and, I guess, can be seen as the most uninformative and empty object.^{1} Then it becomes not so surprising that

```
data.frame(x = c(1, NULL, 2))
# x
# 1 1
# 2 2
```

That is, R does not reserve any space for this null object.^{2} Meanwhile, looking at `?'NA'`

we see that

NA is a logical constant of length 1 which contains a missing value

indicator. NA can be coerced to any other vector type except raw.

Importantly, `NA`

is of length 1 so that R reserves some space for it. E.g.,

```
data.frame(x = c(1, NA, 2))
# x
# 1 1
# 2 NA
# 3 2
```

Also, the data frame structure requires all the columns to have the same number of elements so that there can be no “holes” (i.e., `NULL`

values).

Now you could replace zeroes by `NULL`

in a data frame in the sense of completely removing all the rows containing at least one zero. When using, e.g., `var`

, `cov`

, or `cor`

, that is actually equivalent to first replacing zeroes with `NA`

and setting the value of `use`

as `"complete.obs"`

. Typically, however, this is unsatisfactory as it leads to extra information loss.

**2.** Instead of running some sort of loop, in the solution I use `df == 0`

vectorization. `df == 0`

returns (try it) a matrix of the same size as `df`

, with the entries `TRUE`

and `FALSE`

. Further, we are also allowed to pass this matrix to the subsetting `[...]`

(see `?'['`

). Lastly, while the result of `df[df == 0]`

is perfectly intuitive, it may seem strange that `df[df == 0] <- NA`

gives the desired effect. The assignment operator `<-`

is indeed not always so smart and does not work in this way with some other objects, but it does so with data frames; see `?'<-'`

.

_{1 The empty set in the set theory feels somehow related.}

_{2 Another similarity with the set theory: the empty set is a subset of every set, but we do not reserve any space for it.}

###### Answered By: Anonymous

Disclaimer: This content is shared under creative common license cc-by-sa 3.0. It is generated from StackExchange Website Network.