<- tibble::tribble(
survey ~Survey.Response, ~Code,
"Response1", -9L,
"Response2", 2L,
"Response3", 10L,
"Response4", 0L,
"Response5", 5L,
"Response6", -9L,
"Missing", NA
)
Create data
This was written originally in an Excel spreadsheet and used {datapasta} to copy into R as code to build the same data frame. {datapasta} can be access through RStudio as an Addin as well as code. Find out more about {datapasta} from the Introduction to R and R Studio course.
Recoding to NA
Recode to NA
library(tidyverse)
|>
survey mutate(new_column = na_if(Code, -9))
# A tibble: 7 × 3
Survey.Response Code new_column
<chr> <int> <int>
1 Response1 -9 NA
2 Response2 2 2
3 Response3 10 10
4 Response4 0 0
5 Response5 5 5
6 Response6 -9 NA
7 Missing NA NA
It’s also possible to use the numbers and case_when()
:
- 1
-
Where
Code
is less than 0 then code toNA
. - 2
-
Where
Code
is equal to 0 then recode to1000
which is a number that will stand out. - 3
-
For everything else return the original data from column
Code
.
# A tibble: 7 × 3
Survey.Response Code new_column
<chr> <int> <dbl>
1 Response1 -9 NA
2 Response2 2 2
3 Response3 10 10
4 Response4 0 1000
5 Response5 5 5
6 Response6 -9 NA
7 Missing NA NA
Or ifelse()
where there are only two options:
|>
survey mutate(new_column = ifelse(Code < 0, NA, Code))
# A tibble: 7 × 3
Survey.Response Code new_column
<chr> <int> <int>
1 Response1 -9 NA
2 Response2 2 2
3 Response3 10 10
4 Response4 0 0
5 Response5 5 5
6 Response6 -9 NA
7 Missing NA NA
Recode from NA
|>
survey mutate(new_column2 = replace_na(Code, 1000))
# A tibble: 7 × 3
Survey.Response Code new_column2
<chr> <int> <int>
1 Response1 -9 -9
2 Response2 2 2
3 Response3 10 10
4 Response4 0 0
5 Response5 5 5
6 Response6 -9 -9
7 Missing NA 1000
Reuse
CC0
Citation
For attribution, please cite this work as:
Turner, Zoë. 2024. “Recoding an NA and Back Again.” March
12, 2024. https://nhs-r-community.github.io/nhs-r-community/blog/coding-to-and-from-NA.html.