R: creating new variables combining mutate and case when

Viewed 39

So, I need to create new variables measuring wether someone voted strategically in both 2017 and 2021. To that end, we have one variable with the preferred party (Q7) and two with the party the person actually voted for (Q11 for 2021 and Q14 for 2017). Unfortunately, some participants were not allowed to vote "Ich durfte noch nicht wählen" or voted for another party "Andere" .I then tried to create the following code with the following goal:

If someone couldnt rememeber what he voted for -> assign 0

When someone wasnt allowed to vote -> assign NA

When someone voted strategically (either with one of the main parties or one of the others), so if Q7!=Q14 -> assign 1

    BTW_2021 <- BTW_2021 %>% 
mutate(StrategischeWahl2021 = case_when(Q11 == "Ich kann mich nicht errinern" ~ "0",
                                          Q7 == "Andere" ~ "0",
                                          Q7 != Q11 ~ "1",#1=Ja
                                          TRUE ~ "0")) %>%  #0=Nein
  mutate(StrategischeWahl2017 = case_when(Q14 == "Ich kann mich nicht errinern" ~ "0",
                                          Q7 == "Andere" ~ "0",
                                          Q14 == "Ich durfte noch nicht wählen." ~ "NA",
                                          Q7!=Q14 ~"1", #1=Ja
                                          TRUE~"0")) #0=Nein

Unfortunately, this didnt work. Now, when someone can´t remember what he has voted for, he is assigned a 1 instead of a zero. Any insight in to how to fix that would be greatly appreciated ;)

The data:

> BTW_2021 <- BTW_2021 %>%
+   select(Q7, Q11, Q14) %>%
+   slice_sample(n = 20)
> View(BTW_2021)
> dput(BTW_2021)
structure(list(Q7 = c("FDP", "Buendnis 90/Die Gruenen", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"CDU/CSU", "FDP", "FDP"), Q11 = c("Buendnis 90/Die Gruenen", 
"Ich kann mich nicht erinnern", "Die Linke", "FDP", "FDP", "SPD", 
"FDP", "Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "Buendnis 90/Die Gruenen", 
"SPD", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen"), Q14 = c("Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich kann mich nicht erinnern.", 
"SPD", "FDP", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen", "FDP", 
"SPD", "Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Die Linke", "SPD", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen."
)), row.names = c(NA, -20L), class = "data.frame")

the result:

    dput(BTW_2021)
structure(list(Q7 = c("FDP", "Buendnis 90/Die Gruenen", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"CDU/CSU", "FDP", "FDP"), Q11 = c("Buendnis 90/Die Gruenen", 
"Ich kann mich nicht erinnern", "Die Linke", "FDP", "FDP", "SPD", 
"FDP", "Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "Buendnis 90/Die Gruenen", 
"SPD", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen"), Q14 = c("Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich kann mich nicht erinnern.", 
"SPD", "FDP", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen", "FDP", 
"SPD", "Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Die Linke", "SPD", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen."
), StrategischeWahl2021 = c("1", "1", "1", "1", "0", "0", "1", 
"0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "1"
), StrategischeWahl2017 = c("NA", "1", "NA", "1", "1", "0", "1", 
"1", "0", "0", "0", "0", "NA", "NA", "NA", "1", "1", "NA", "NA", 
"NA")), row.names = c(NA, -20L), class = "data.frame")

The expected result: changes for 2021 in row 2, for 2017 in the rows 2, 4, 5

    dput(BTW_2021)
structure(list(Q7 = c("FDP", "Buendnis 90/Die Gruenen", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "SPD", "Buendnis 90/Die Gruenen", 
"CDU/CSU", "FDP", "FDP"), Q11 = c("Buendnis 90/Die Gruenen", 
"Ich kann mich nicht erinnern", "Die Linke", "FDP", "FDP", "SPD", 
"FDP", "Buendnis 90/Die Gruenen", "FDP", "Buendnis 90/Die Gruenen", 
"FDP", "SPD", "SPD", "FDP", "FDP", "Buendnis 90/Die Gruenen", 
"SPD", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen"), Q14 = c("Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich durfte noch nicht wählen.", 
"Ich kann mich nicht erinnern.", "Ich kann mich nicht erinnern.", 
"SPD", "FDP", "CDU/CSU", "FDP", "Buendnis 90/Die Gruenen", "FDP", 
"SPD", "Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Die Linke", "SPD", "Ich durfte noch nicht wählen.", 
"Ich durfte noch nicht wählen.", "Ich durfte noch nicht wählen."
), StrategischeWahl2021 = c("1", "0", "1", "1", "0", "0", "1", 
"0", "0", "0", "0", "0", "0", "0", "0", "1", "1", "0", "0", "1"
), StrategischeWahl2017 = c("NA", "0", "NA", "0", "0", "0", "1", 
"1", "0", "0", "0", "0", "NA", "NA", "NA", "1", "1", "NA", "NA", 
"NA")), row.names = c(NA, -20L), class = "data.frame")
1 Answers

There are a few issues:

  • How errinnern is spelled => erinnern (both Q11 and Q14)
  • If there is dot after erinnern. (Q14)
  • The direction of which case_when evaluates (for StrategischeWahl2021). You need to move the Q7 != Q11 down.

I.e.

BTW_2021_new <-
  BTW_2021 %>% 
  mutate(StrategischeWahl2017 = case_when(Q14 == "Ich kann mich nicht erinnern." ~ "0",
                                          Q7 == "Andere" ~ "0",
                                          Q14 == "Ich durfte noch nicht wählen." ~ "NA", # Consider NA_character_
                                          Q7 != Q14 ~ "1",
                                          TRUE ~ "0")) %>%
  mutate(StrategischeWahl2021 = case_when(Q11 == "Ich kann mich nicht erinnern" ~ "0",
                                          Q7 == "Andere" ~ "0",
                                          Q7 != Q11 ~ "1",#1=Ja
                                          TRUE ~ "0"))

Output:

                        Q7                          Q11                            Q14 StrategischeWahl2021 StrategischeWahl2017
1                      FDP      Buendnis 90/Die Gruenen Ich durfte noch nicht wählen.                    1                   NA
2  Buendnis 90/Die Gruenen Ich kann mich nicht erinnern  Ich kann mich nicht erinnern.                    0                    0
3  Buendnis 90/Die Gruenen                    Die Linke Ich durfte noch nicht wählen.                    1                   NA
4  Buendnis 90/Die Gruenen                          FDP  Ich kann mich nicht erinnern.                    1                    0
5                      FDP                          FDP  Ich kann mich nicht erinnern.                    0                    0
6                      SPD                          SPD                            SPD                    0                    0
7  Buendnis 90/Die Gruenen                          FDP                            FDP                    1                    1
8  Buendnis 90/Die Gruenen      Buendnis 90/Die Gruenen                        CDU/CSU                    0                    1
9                      FDP                          FDP                            FDP                    0                    0
10 Buendnis 90/Die Gruenen      Buendnis 90/Die Gruenen        Buendnis 90/Die Gruenen                    0                    0
11                     FDP                          FDP                            FDP                    0                    0
12                     SPD                          SPD                            SPD                    0                    0
13                     SPD                          SPD Ich durfte noch nicht wählen.                    0                   NA
14                     FDP                          FDP Ich durfte noch nicht wählen.                    0                   NA
15                     FDP                          FDP Ich durfte noch nicht wählen.                    0                   NA
16                     SPD      Buendnis 90/Die Gruenen                      Die Linke                    1                    1
17 Buendnis 90/Die Gruenen                          SPD                            SPD                    1                    1
18                 CDU/CSU                      CDU/CSU Ich durfte noch nicht wählen.                    0                   NA
19                     FDP                          FDP Ich durfte noch nicht wählen.                    0                   NA
20                     FDP      Buendnis 90/Die Gruenen Ich durfte noch nicht wählen.                    1                   NA

Check:

> identical(BTW_2021_new$StrategischeWahl2017, BTW_2021_expected$StrategischeWahl2017)
[1] TRUE
> identical(BTW_2021_new$StrategischeWahl2021, BTW_2021_expected$StrategischeWahl2021)
[1] TRUE
Related