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

时间:2017-12-12 16:08:59

标签: r dplyr r-car

我试图采用代表党派关系的三个不同变量并将它们合二为一。数据看起来像这样,每个受访者只有三个变量中的一个变量的数据为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)))))

但这些都不起作用。关于我做错了什么的指示?

2 个答案:

答案 0 :(得分:0)

您正在寻求转型和重塑为整洁的格式。 试试这个: 库(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

答案 1 :(得分:0)

我通过做一些事情让你的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)
                                                       )))))