Home > OS >  How to code values across the whole dataset as NA
How to code values across the whole dataset as NA

Time:05-17

I have a dataset in which "-2" or "-1" stands for NA. I am capable to recode every single column that way, but I fail to do it efficiently across the whole dataset. I know there is probably an easy solution to the problem, but so far I did not find one. Can anyone help me?

here is my data

structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25), Datum = structure(c(1650326400, 
1650326400, 1650931200, 1651104000, 1651104000, 1651104000, 1651104000, 
1651104000, 1651190400, 1651449600, 1651536000, 1651536000, 1651622400, 
1651622400, 1651622400, 1652054400, 1652140800, 1652140800, 1652140800, 
1652140800, 1652227200, 1652227200, 1652227200, 1652313600, 1652400000
), class = c("POSIXct", "POSIXt"), tzone = "UTC"), `Frage 2 - Bitte wählen Sie Ihren Standort.` = c("Kreis Nordfriesland", 
"Kreis Nordfriesland", "Landesamt für Zuwanderung und Flüchtlinge", 
"Landesamt für Zuwanderung und Flüchtlinge", "Kreis Rendsburg-Eckernförde", 
"Kreis Rendsburg-Eckernförde", "Kreis Rendsburg-Eckernförde", 
"-1", "Stadt Neumünster", "-1", "Kreis Stormarn", "Kreis Herzogtum Lauenburg", 
"Stadt Kiel", "Kreis Rendsburg-Eckernförde", "-1", "Kreis Dithmarschen", 
"-1", "Kreis Dithmarschen", "Kreis Dithmarschen", "Kreis Dithmarschen", 
"Kreis Dithmarschen", "Kreis Dithmarschen", "Stadt Lübeck", "Kreis Rendsburg-Eckernförde", 
"Kreis Dithmarschen"), `Frage 3 - Bitte wählen Sie Ihre Position.` = c("Sachgebietsleitung", 
"Sachgebietsleitung", "Teamleitung", "Sachgebietsleitung", "Mitarbeitende*r", 
"Teamleitung", "Mitarbeitende*r", "-1", "Mitarbeitende*r", "-1", 
"Sachgebietsleitung", "Sachgebietsleitung", "Sachgebietsleitung", 
"Mitarbeitende*r", "-1", "Sachgebietsleitung", "-1", "Teamleitung", 
"Mitarbeitende*r", "Mitarbeitende*r", "Mitarbeitende*r", "Mitarbeitende*r", 
"Teamleitung", "Mitarbeitende*r", "Mitarbeitende*r"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Mensch` = c("-1", 
"-1", "-1", "-1", "Mensch", "Mensch", "-1", "-2", "Mensch", "-2", 
"Mensch", "Mensch", "-1", "-1", "-2", "-1", "-2", "-1", "-1", 
"Mensch", "Mensch", "-1", "Mensch", "-1", "Mensch"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Entscheidungen` = c("-1", 
"-1", "-1", "-1", "Entscheidungen", "Entscheidungen", "-1", "-2", 
"Entscheidungen", "-2", "Entscheidungen", "Entscheidungen", "-1", 
"-1", "-2", "-1", "-2", "-1", "-1", "-1", "-1", "Entscheidungen", 
"Entscheidungen", "-1", "-1"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Handeln` = c("-1", 
"Handeln", "-1", "-1", "-1", "-1", "Handeln", "-2", "Handeln", 
"-2", "Handeln", "-1", "-1", "-1", "-2", "-1", "-2", "-1", "-1", 
"-1", "Handeln", "-1", "Handeln", "-1", "-1"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Transparenz` = c("-1", 
"-1", "-1", "-1", "-1", "-1", "-1", "-2", "Transparenz", "-2", 
"-1", "-1", "-1", "-1", "-2", "-1", "-2", "-1", "Transparenz", 
"-1", "Transparenz", "-1", "-1", "-1", "-1"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Vernetzung` = c("-1", 
"-1", "-1", "Vernetzung", "-1", "-1", "Vernetzung", "-2", "Vernetzung", 
"-2", "-1", "-1", "-1", "-1", "-2", "Vernetzung", "-2", "Vernetzung", 
"Vernetzung", "-1", "Vernetzung", "Vernetzung", "Vernetzung", 
"-1", "Vernetzung"), `Frage 5 - Unabhängig von der möglichen Entwicklung im Rahmen des Projektes - In welchen Leitbildbereichen sehen Sie sich selbst unter den Behörden der Zuwanderungsverwaltung als Positivbeispiel und könnten sich vorstellen, anderen Zuwanderungs-/Ausländerbehörden im Austausch davon zu berichten/Fragen zu beantworten? - Abläufe & Prozesse` = c("-1", 
"-1", "-1", "Abläufe & Prozesse", "-1", "Abläufe & Prozesse", 
"-1", "-2", "Abläufe & Prozesse", "-2", "Abläufe & Prozesse", 
"-1", "-1", "-1", "-2", "-1", "-2", "-1", "Abläufe & Prozesse", 
"-1", "-1", "-1", "-1", "-1", "Abläufe & Prozesse")), row.names = c(NA, 
-25L), class = c("tbl_df", "tbl", "data.frame"))   

CodePudding user response:

I think David's solution is a good one, but if you are happy to recode all columns then na_if() accepts a data frame, so it's even simpler:

library(dplyr)
mydata |>
    na_if(-1) |>
    na_if(-2)

If you have more than two values to replace I would not support using a big chain of na_if() calls and would prefer to use mutate(across()) and recode.

CodePudding user response:

If you prefer everything in one call, I'd use the more flexible replace, across all columns:

library(dplyr)
df %>% 
  mutate(across(everything(), ~ replace(., . %in% c(-1, -2), NA)))

and in base R:

df <- lapply(df, \(x) replace(x, x %in% -1:-2, NA))

CodePudding user response:

How about this? Using the tidyverse and na_if:

# library(tidyverse) # to load all packages at once!
library(dplyr) # mutate, pipe, etc
library(tibble) # tibble/tribble
library(tidyr) # na_if

df <- tribble(
  ~id, ~q1, ~q2,
  -1, -1, "-1",
  -2, 1, "A",
  -3, 3, "B"
)
df
#> # A tibble: 3 x 3
#>      id    q1 q2   
#>   <dbl> <dbl> <chr>
#> 1    -1    -1 -1   
#> 2    -2     1 A    
#> 3    -3     3 B

df2 <- df %>% mutate(across(-id, na_if, y = -1))
df2
#> # A tibble: 3 x 3
#>      id    q1 q2   
#>   <dbl> <dbl> <chr>
#> 1    -1    NA <NA> 
#> 2    -2     1 A    
#> 3    -3     3 B

Created on 2022-05-16 by the reprex package (v2.0.1)

  • Related