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

R Create dummy datasets based on reference dataset

上下文

我想为一个项目构建两个虚拟调查数据框。一个数据框对 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)
                )
    

我的Objective

我想根据参考table中的条件,向这两个数据帧中的每一个添加列 .

参考文献 table 包含要添加到两个调查数据框中的每个问题,以及每个问题的详细信息。这是它的样子

  1. 参考Table

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

台阶

对于每个调查数据框(Relationship & Pulse),我想执行以下操作 -

1) 在参考 table 中查找它们各自的问题代码,并仅将这些问题添加到数据框中。例如,Relationship 数据框将只有与参考 table 中的 TYPE = 'Relationship' 有关的问题代码。 Pulse 数据帧也是如此。

2) 对每个问题的回答将有条件地添加到每个数据框中。这是条件-

我的尝试

使用 previously asked question for the conditional response creation and this 从引用 table 添加列,我试图解决这个问题。但是我还没有得到我想要的东西。

如有任何意见,我们将不胜感激

期望输出

我想要的输出 tables 看起来像这样 -

关系数据帧输出

            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

会像

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 条件以满足您的需要。