R根据参考数据集创建虚拟数据集

时间:2019-01-31 09:18:55

标签: r if-statement cbind

上下文

我想为一个项目建立两个虚拟调查数据框。一个数据框具有对Relationship调查的响应,而另一个数据框具有对Pulse调查的响应。

这是每个人的样子-

  1. 关系数据框

    #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)
                )
    
  2. 脉冲数据框

    #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)
                )
    

我的目标

我想根据参考表中的条件为这两个数据框中的每一个添加列

参考表包括要添加到两个调查数据框中的每个问题,以及有关每个问题的更多详细信息。看起来就是这样

  1. 参考表

    #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

1 个答案:

答案 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条件。