У меня есть фрейм данных с участниками (ID), которые ответили на несколько анкет последовательно (каждая строка является анкетой). Все они начинали с «общего» вопросника, а затем отвечали на пары «до» и «после» вопросника (столбец «Заказ»). Столбец «Значение» показывает пример данных (есть еще много столбцов с данными и еще много участников). Количество ответивших «пар» у участников разное.
ID Order Value
1 1 general 1
2 1 pre 3
3 1 post 4
4 1 post 7
5 1 pre 0
6 1 post 10
7 2 general 1
8 2 post 0
9 2 pre 12
10 3 general 12
11 3 pre 3
12 3 post 4
13 3 pre 6
14 3 pre 8
Пример данных:
df1 <- data.frame("ID" = as.factor(c('1', '1', '1', '1', '1', '1', '2', '2', '2', '3', '3', '3', '3', '3')), "Order" = as.factor(c('general', 'pre', 'post', 'post', 'pre', 'post', 'general', 'post', 'pre', 'general', 'pre', 'post', 'pre', 'pre')), "Value" = as.numeric(c('1', '3','4','7','0','10', '1','0','12', '12', '3', '4', '6','8')))
Задача : Некоторые участники забыли / не смогли ответить на предварительный вопросник пре / пост пары, другие забыли / не удалось ответить на пост-анкету пре / пост-пары.
Цель : мне нужно добавить строку «pre» или «post» для каждой пары, которая не завершена. Следовательно, последовательные строки всегда должны читаться до публикации, до публикации и до публикации c. Добавленная строка должна включать идентификатор, а также значение из существующей части пары.
> df2
ID Order Value
1 1 general 1
2 1 pre 3
3 1 post 4
4 1 pre 7
5 1 post 7
6 1 pre 0
7 1 post 10
8 2 general 1
9 2 pre 0
10 2 post 0
11 2 pre 12
12 2 post 12
13 3 general 12
14 3 pre 3
15 3 post 4
16 3 pre 6
17 3 post 6
18 3 pre 8
19 3 post 8
См. Пример данных здесь:
df2 <- data.frame("ID" = as.factor(c('1', '1', '1', '1', '1', '1', '1', '2', '2', '2', '2', '2', '3', '3', '3', '3', '3', '3', '3')), "Order" = as.factor(c('general', 'pre', 'post', 'pre', 'post', 'pre', 'post', 'general', 'pre', 'post', 'pre', 'post', 'general', 'pre', 'post', 'pre', 'post', 'pre', 'post')), "Value" = as.numeric(c('1', '3', '4', '7', '7', '0', '10', '1', '0', '0', '12', '12', '12', '3', '4', '6', '6', '8', '8')))
Количество пре / пост-пар может быть разным для каждого участника.
Я задал похожий вопрос здесь - но это не сработало для данного конкретного случая. Другой предложенный решение также не сделал. Я пробовал разные версии функции complete () и expand.grid.