试图将多个变量重新编码为一个?

Trying to recode multiple variables into one?

我正在尝试将代表党派关系的三个不同变量合并为一个。数据如下所示,其中每个受访者只有三个变量之一的数据为 1 或 2:

PARTISANSHIP_D PARTISANSHIP_I PARTISANSHIP_R
1 NA NA
2 NA NA
NA 1 NA

我要创建的是一个基于对所有三个变量的响应的 1:6 量表的变量。我尝试使用 dplyr

来做到这一点
survey$partisan <- mutate(survey, partisan = ifelse(PARTISANSHIP_D==1, 6, 
ifelse(PARTISANSHIP_D==2, 5, 
ifelse(PARTISANSHIP_I==1, 4, ifelse(PARTISANSHIP_I==2, 3, ifelse(
PARTISANSHIP_R==2, 2, 1)
)))))

汽车

survey$partisan <- Recode(survey$PARTISANSHIP_D, "1=6; 2=5", 
survey$PARTISANSHIP_I, "1=4; 2=3",
survey$PARTISANSHIP_R, "1=1; 2=2")

和像这样的普通 ifelse 命令:

survey$partisan <- ifelse(survey$PARTISANSHIP_D == 1, 6, 
ifelse(survey$PARTISANSHIP_D == 2, 5,
ifelse(survey$PARTISANSHIP_I == 1, 4, 
ifelse(survey$PARTISANSHIP_I == 2, 3,
ifelse(survey$PARTISANSHIP_R == 2, 2, 1)))))

但其中 none 有效。我做错了什么?

您希望调整并重塑为整洁的格式。 试试这个: 图书馆(dplyr)

    tidysurvey <- gather(survey, ## the source DF
     key = Partisanship, ## A name for the new key varaible
value = Code, ## A name for the new values varaible
PARTISANSHIP_D:PARTISANSHIP_R) ## a list of which of the source DF to reshape

我通过做几件事让你的 mutate 起作用:将调查数据框中的 NA 更改为 0:

survey[is.na(survey)]<-0

这是因为ifelse遇到NA就停止了。

并且不要将变异结果分配给 survey$partisan。相反,将其分配给整个数据框:

survey <- mutate(survey, partisan = ifelse(PARTISANSHIP_D==1, 6, 
                                                ifelse(PARTISANSHIP_D==2, 5, 
                                                       ifelse(PARTISANSHIP_I==1, 4, ifelse(PARTISANSHIP_I==2, 3, ifelse(
                                                         PARTISANSHIP_R==2, 2, 1)
                                                       )))))