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)