需要基于其他变量的相等性来创建变量

时间:2019-01-30 11:40:47

标签: r

我有一个名为CSES(选举系统比较研究)的数据集,其中每一行对应于来自不同国家(不同年份)的一个人(民意调查中的一次采访)。

我需要创建一个变量,以识别同一个人所感知的每个人投票的政党的意识形态。

但是,数据集通过字母A,B,C等来识别各方的这种意识形态(以及许多其他变量)。然后,当要识别每个人投票的一方时,它具有唯一的代码号,这与不同年份的这些信函不对应(即同一党派在不同年份可以有不同的信函-当然,由于不同国家/地区都有自己的政党,因此它永远不会是不同国家/地区的同一个党派)

虚构数据,以帮助澄清,复制和创建代码:

让我们说:

国家= c(1,1,1,1,2,2,2,2,3,3,3,3)

year = c(2000,2000,2004,2004,2002,2002,2004,2008,2000,2000,2000,2000)

party_A_number = c(11,11,12,12,21,21,22,23,31,31,31,31)

party_B_number = c(12,12,11,11,22,22,21,22,32,32,32,32)

party_C_number = c(13,13,13,13,23,23,23,21,33,33,33,33)

party_voted = c(12,13,12,11,21,24,23,22,31,32,33,31)

ideology_party_A <-floor(runif(12,min = 1,max = 10))

ideology_party_B <-楼(runif(12,min = 1,max = 10))

ideology_party_C <-楼层(runif(12,min = 1,max = 10))

我们将要创建的变量称为“ ideology_voted”:

我需要类似的东西:

IF party_A_number == party_voted THEN ideology_voted = ideology_party_A

如果party_B_number == party_voted,那么ideology_voted == ideology_party_B

如果party_C_number == party_voted,那么ideology_voted == ideology_party_C

真实数据集在每个国家,数十个国家和选举年中有(最多)9个主要政党的9个字母。因此,有一个代码可以迭代字母A-I而不是“如果投票的是甲方,则……;如果是乙方,那么……。”

尽管如此,即使我尝试使用更长的重复代码(每位求职者信进行一次转换-这会给我8行代码),我仍然遇到麻烦

1 个答案:

答案 0 :(得分:0)

library(tidyverse)

df <- tibble(
  country = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3),
  year = c(2000, 2000, 2004, 2004,  2002, 2002, 2004, 2008, 2000, 2000, 2000, 2000),
  party_A_number = c(11, 11, 12, 12, 21, 21, 22, 23, 31, 31, 31, 31),
  party_B_number = c(12,  12,  11,  11,  22, 22, 21, 22, 32, 32, 32, 32),
  party_C_number = c(13, 13, 13, 13, 23, 23, 23, 21, 33, 33, 33, 33),
  party_voted = c(12, 13, 12, 11, 21, 24, 23, 22, 31, 32, 33, 31),
  ideology_party_A = floor(runif (12, min = 1, max = 10)), 
  ideology_party_B = floor(runif (12, min = 1, max = 10)),
  ideology_party_C = floor(runif (12, min = 1, max = 10))
)

> df
# A tibble: 12 x 9
   country  year party_A_number party_B_number party_C_number party_voted ideology_party_A ideology_party_B
     <dbl> <dbl>          <dbl>          <dbl>          <dbl>       <dbl>            <dbl>            <dbl>
 1       1  2000             11             12             13          12                9                3
 2       1  2000             11             12             13          13                2                6
 3       1  2004             12             11             13          12                3                8
 4       1  2004             12             11             13          11                7                8
 5       2  2002             21             22             23          21                2                7
 6       2  2002             21             22             23          24                8                2
 7       2  2004             22             21             23          23                1                7
 8       2  2008             23             22             21          22                7                7
 9       3  2000             31             32             33          31                4                3
10       3  2000             31             32             33          32                7                5
11       3  2000             31             32             33          33                1                6
12       3  2000             31             32             33          31                2                1
# ... with 1 more variable: ideology_party_C <dbl>

您似乎正在使用case_when进行调节:

ideology_voted <- df %>% transmute(
  ideology_voted = case_when(
    party_A_number == party_voted ~ ideology_party_A,
    party_B_number == party_voted ~ ideology_party_B,
    party_C_number == party_voted ~ ideology_party_C,
    TRUE                          ~ party_voted
  )
)

> ideology_voted
# A tibble: 12 x 1
   ideology_voted
            <dbl>
 1              3
 2              7
 3              3
 4              8
 5              2
 6             24
 7              8
 8              7
 9              4
10              5
11              6
12              2

请注意,case_when的求值是惰性的,因此使用第一个真实条件(例如,如果碰巧有多个实际上是真实的)。