0

我试图将三个代表党派关系的不同变量合并为一个。数据如下所示,其中每个受访者只有三个变量之一的数据,即 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)))))

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

4

2 回答 2

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
于 2017-12-12T16:21:50.627 回答
0

我通过做几件事让你的变异起作用:将调查数据框中的 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)
                                                       )))))
于 2017-12-12T17:27:21.733 回答