上下文
我想为一个项目建立两个虚拟调查数据框。一个数据框具有对Relationship
调查的响应,而另一个数据框具有对Pulse
调查的响应。
这是每个人的样子-
关系数据框
#Relationship Data
rel_data= data.frame(
TYPE=rep('Relationship',446),
SURVEY_ID = rep('SURVEY 2018 Z662700',446),
SITE_ID=rep('Z662700',446),
START_DATE= rep(as.Date('2018-07-01'),446),
END_DATE= rep(as.Date('2018-07-04'),446)
)
脉冲数据框
#Pulse Data
pulse_data= data.frame(
TYPE=rep('Pulse',525),
SURVEY_ID = rep('SURVEY 2018 W554800',525),
SITE_ID=rep('W554800',525),
START_DATE= rep(as.Date('2018-04-01'),525),
END_DATE= rep(as.Date('2018-04-04'),525)
)
我的目标
我想根据参考表中的条件为这两个数据框中的每一个添加列。
参考表包括要添加到两个调查数据框中的每个问题,以及有关每个问题的更多详细信息。看起来就是这样
参考表
#Reference Table - Question Bank
qbank= data.frame(QUEST_ID=c('QR1','QR2','QR3','QR4','QR5','QP1','QP2','QP3','QP4','QP5','QP6'),
QUEST_TYPE=c('Relationship','Relationship','Relationship','Relationship','Relationship',
'Pulse','Pulse','Pulse','Pulse','Pulse','Pulse'),
SCALE=c('Preference','Satisfaction','Satisfaction','Satisfaction','Preference','NPS',
'Satisfaction','Satisfaction','Satisfaction','Preference','Open-Ended'),
FOLLOWUP=c('No','No','No','No','No','No','Yes','No','Yes','No','No'))
步骤
对于每个调查数据框(“关系和脉搏”),我想执行以下操作-
1)在参考表中查找它们各自的问题代码,并将这些问题仅添加到数据框中。例如,Relationship
数据帧将只有参考表中与TYPE = 'Relationship'
有关的问题代码。对于Pulse
数据框也是如此。
2)对每个问题的回答将有条件地添加到每个数据框。这是条件-
SCALE = 'Preference'
,则响应将为150,100,50,0 or -50
。而且,这些数字将以任何随机顺序生成。 SCALE = 'NPS'
,则响应范围为0 to 10
。将会生成数字,以使净发起人得分(NPS)等于50%。 提醒:NPS = 9s和10s的百分比减去0s至6s的百分比。 SCALE = 'Satisfaction'
,则响应范围为1 (Extremely Dissatisfied) to 5 (Extremely Satisfied)
。生成的数字应使 1s和2s的百分比等于90%。 SCALE = 'Open-Ended'
,则确保该列为空(即不包含任何响应)。我的尝试
我使用this先前提出的条件响应创建问题和this来添加参考表中的列,我试图解决此问题。但是我还没有找到想要的东西。
对此,我们将不胜感激
所需的输出
我想要的输出表如下所示-
关系数据框输出
TYPE SURVEY_ID SITE_ID START_DATE END_DATE QR1 QR2 QR3 QR4 QR5
1 Relationship SURVEY 2018 Z662700 Z662700 2018-07-01 2018-07-04 150 5 1 2 2
2 Relationship SURVEY 2018 Z662700 Z662700 2018-07-01 2018-07-04 100 1 2 2 2
3 Relationship SURVEY 2018 Z662700 Z662700 2018-07-01 2018-07-04 100 4 5 2 2
4 Relationship SURVEY 2018 Z662700 Z662700 2018-07-01 2018-07-04 150 1 1 2 2
and so on
和脉冲数据帧输出
TYPE SURVEY_ID SITE_ID START_DATE END_DATE QP1 QP2 QP3 QP4 QP5 QP6
1 Pulse SURVEY 2018 W554800 W554800 2018-04-01 2018-04-04 7 1 3 3 100
2 Pulse SURVEY 2018 W554800 W554800 2018-04-01 2018-04-04 8 5 3 1 100
3 Pulse SURVEY 2018 W554800 W554800 2018-04-01 2018-04-04 3 1 4 3 100
4 Pulse SURVEY 2018 W554800 W554800 2018-04-01 2018-04-04 1 2 4 3 100
and so on
答案 0 :(得分:1)
会类似
rel_data %>%
left_join(qbank, by = c("TYPE" = "QUEST_TYPE")) %>%
select(-FOLLOWUP) %>%
unique() %>%
mutate(val = case_when(SCALE == "Preference" ~ "A",
SCALE == "Satisfaction" ~ "B",
SCALE == "NPS" ~ "C",
TRUE ~ NA_character_ )) %>%
select(-SCALE) %>%
spread(key = QUEST_ID, value = val)
为您工作?
您可以根据自己的需要修改case_when
条件。