代码之家  ›  专栏  ›  技术社区  ›  Varun

r基于引用数据集创建虚拟数据集

  •  1
  • Varun  · 技术社区  · 5 年前

    语境

    我想为一个项目构建一个两个虚拟的调查数据框架。一个数据帧对 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)在参考表中查找各自的问题代码,并仅将这些问题添加到数据框中。例如, 关系 数据帧将只有与 TYPE = 'Relationship' 从参考表。同样适用于 脉搏 数据文件。

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

    • 如果 SCALE = 'Preference' 在引用表中,那么响应将是 150,100,50,0 or -50 . 此外,这些数字将在 任何随机顺序。
    • 如果 SCALE = 'NPS' 在引用表中,响应的范围为 0 to 10 . 生成的数字应确保 净发起人得分(NPS)等于50%。 提醒:NPS=9秒和10秒的百分比减去0到6秒的百分比。
    • 如果 SCALE = 'Satisfaction' 在引用表中,响应的范围为 1 (Extremely Dissatisfied) to 5 (Extremely Satisfied) . 生成的数字应确保 1和2的百分比等于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 回复  |  直到 5 年前
        1
  •  1
  •   Aramis7d    5 年前

    会像这样吗

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