R Создание фиктивных наборов данных на основе эталонного набора данных. - PullRequest
0 голосов
/ 31 января 2019

Контекст

Я хотел бы создать два фиктивных кадра данных опроса для проекта.Один фрейм данных содержит ответы на опрос 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)
                )
    

Моя цель

Я бы хотел добавить столбцы к каждому из этих двух кадров данных на основе условий из справочной таблицы .

Справочная таблица состоит извопросы, которые будут добавлены к каждому из двух фреймов данных опроса, вместе с дополнительной информацией по каждому задаваемому вопросу.Вот как это выглядит

Справочная таблица

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

Шаги

Для каждого кадра данных опроса (Pulse), я хотел бы сделать следующее -

1) Найти соответствующие коды вопросов в справочной таблице и добавить только эти вопросы в кадр данных.Например, кадр данных Relationship будет иметь только коды вопросов, относящиеся к TYPE = 'Relationship' из справочной таблицы.И то же самое для Pulse фрейма данных.

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', то гарантирует, что столбец пуст (т.е. не содержит ответов).

Моя попытка

Использование этого ранее заданного вопроса для создания условного ответа и этого Чтобы добавить столбцы из справочной таблицы, я попытался решить проблему.Но я еще не получил то, что искал.

Буду признателен за любые входные данные

Желаемый вывод

Мой желаемый выводТаблицы будут выглядеть так:

Выходные данные кадров данных

            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 голосов
/ 31 января 2019

Будет ли у вас работать что-то вроде

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 в соответствии со своими потребностями.

...