简体   繁体   English

R:创建新的变量结合 mutate 和 case when

[英]R: creating new variables combining mutate and case when

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).因此,我需要创建新变量来衡量某人在 2017 年和 2021 年是否进行了战略性投票。为此,我们有一个变量与首选政党(Q7)和两个与该人实际投票的政党(2021 年 Q11 和 Q14 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:不幸的是,一些参与者不允许投票“Ich durfte noch nicht wählen”或投票给另一方“Andere”。然后我尝试创建以下代码,目标如下:

If someone couldnt rememeber what he voted for -> assign 0如果有人不记得他投了什么票 -> 分配 0

When someone wasnt allowed to vote -> assign NA当某人不被允许投票时 -> 分配 NA

When someone voted strategically (either with one of the main parties or one of the others), so if Q7!=Q14 -> assign 1当有人战略性地投票时(与主要政党之一或其他政党之一),所以如果 Q7!=Q14 -> 分配 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.现在,当有人不记得他投票的内容时,他会被分配一个 1 而不是 0。 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预期结果:2021 年第 2 行的变化,2017 年第 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")

There are a few issues:有几个问题:

  • How errinnern is spelled => erinnern (both Q11 and Q14) errinnern的拼写方式 => erinnern (Q11 和 Q14)
  • If there is dot after erinnern.如果erinnern 之后有点。 (Q14) (Q14)
  • The direction of which case_when evaluates (for StrategischeWahl2021). case_when评估的方向(对于 StrategischeWahl2021)。 You need to move the Q7 != Q11 down.您需要将Q7 != Q11向下移动。

Ie IE

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: 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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM