Я пытаюсь использовать R, чтобы изменить форму панели / продольного набора данных, введенного из съемки, в широкий формат в длинный. Это похоже, но отличается от предыдущего вопроса, который я задавал Широкий или длинный формат с несколькими переменными
Вот базовый c формат данных:
set.seed(1001)
df <- data.frame(
id = 1:2,
Q1_Choice = sample(1:3,2),
Q2_Choice = sample(1:3,2),
Q3_Choice = sample(1:3,2),
Q1_Status_Opt_1 = c(0,0),
Q1_Status_Opt_2 = sample(1:40, 2),
Q1_Status_Opt_3 = sample(1:40, 2),
Q2_Status_Opt_1 = c(0,0),
Q2_Status_Opt_2 = sample(1:40, 2),
Q2_Status_Opt_3 = sample(1:40, 2),
Q3_Status_Opt_1 = c(0,0),
Q3_Status_Opt_2 = sample(1:40, 2),
Q3_Status_Opt_3 = sample(1:40, 2),
Q1_Time_Opt_1 = c(5,5),
Q1_Time_Opt_2 = sample(100:200, 2),
Q1_Time_Opt_3 = sample(100:200, 2),
Q2_Time_Opt_1 = c(5,5),
Q2_Time_Opt_2 = sample(1:40, 2),
Q2_Time_Opt_3 = sample(1:40, 2),
Q3_Time_Opt_1 = c(5,5),
Q3_Time_Opt_2 = sample(1:40, 2),
Q3_Time_Opt_3 = sample(100:200, 2),
Age = c(45,67))
df
#> id Q1_Choice Q2_Choice Q3_Choice Q1_Status_Opt_1 Q1_Status_Opt_2
#> 1 1 3 3 3 0 11
#> 2 2 1 1 2 0 38
#> Q1_Status_Opt_3 Q2_Status_Opt_1 Q2_Status_Opt_2 Q2_Status_Opt_3
#> 1 36 0 28 29
#> 2 12 0 4 40
#> Q3_Status_Opt_1 Q3_Status_Opt_2 Q3_Status_Opt_3 Q1_Time_Opt_1
#> 1 0 31 3 5
#> 2 0 10 28 5
#> Q1_Time_Opt_2 Q1_Time_Opt_3 Q2_Time_Opt_1 Q2_Time_Opt_2 Q2_Time_Opt_3
#> 1 100 149 5 30 32
#> 2 107 114 5 27 6
#> Q3_Time_Opt_1 Q3_Time_Opt_2 Q3_Time_Opt_3 Age
#> 1 5 1 189 45
#> 2 5 8 107 67
- 2 человека перечислены по id.
- Каждый человек отвечает на три вопроса.
- Каждый вопрос имеет три варианта {1-3}.
- Ответы на каждый вопрос представлены в переменных Q {1_3} _Choice.
- Выбор, сделанный в данных опроса, вводится как 1,2 или 3. Их следует преобразовать в 0,1 для каждого варианта в длинном формате.
- Существуют две дополнительные переменные, которые варьируются в каждой опции каждого вопроса (Статус и время).
- Последняя переменная Age является постоянной для каждого идентификатора.
- Я хотел бы изменить это из широкоформатного в длинный формат, используя tidyr (pivot_longer) или, возможно, data.table
Результат должен выглядеть следующим образом:
result
#> id question option choice Status Time Age
#> 1 1 1 1 0 0 5 45
#> 2 1 1 2 0 11 100 45
#> 3 1 1 3 1 36 149 45
#> 4 1 2 1 0 0 5 45
#> 5 1 2 2 0 28 30 45
#> 6 1 2 3 1 29 32 45
#> 7 1 3 1 0 0 5 45
#> 8 1 3 2 0 31 1 45
#> 9 1 3 3 1 3 189 45
#> 10 2 1 1 1 0 5 67
#> 11 2 1 2 0 38 107 67
#> 12 2 1 3 0 12 114 67
#> 13 2 2 1 1 0 5 67
#> 14 2 2 2 0 4 27 67
#> 15 2 2 3 0 40 6 67
#> 16 2 3 1 0 0 5 67
#> 17 2 3 2 1 10 8 67
#> 18 2 3 3 0 28 107 67
По какой-то причине я действительно борюсь с этими более сложными проблемами изменения формы, и поэтому любая помощь очень ценится.