我有一个名为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行代码),我仍然遇到麻烦
答案 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
的求值是惰性的,因此使用第一个真实条件(例如,如果碰巧有多个实际上是真实的)。