Remodelar / reunir função para criar um conjunto de dados pronto para análise multinível

Eu tenho um grande conjunto de dados, com 240 casos representando 240 pacientes. Todos foram submetidos a testes neuropsicológicos e preencheram questionários. Além disso, seus outros significativos (doravante: proxies) também preencheram questionários. Como 'paciente' e 'proxy' estão aninhados em 'casais', quero realizar uma análise multinível em R. Para isso, preciso remodelar meu conjunto de dados para executar esse tipo de análise.

Simplesmente disse, quero 'duplicar' minhas linhas. Para os IDs de assunto duplo, adicione uma nova variável com 1s e 2s, em que 1 representa dados do paciente e 2 representa dados proxy. Então, eu quero que as linhas sejam preenchidas com 1. todos os dados do paciente e as colunas que contêm os dados do proxy sejam NA ou vazios ou o que seja, e 2. todos os dados do proxy e todos os dados do paciente NA ou vazios.

Digamos que estes são meus dados:

id <- c(1:5)
names <- c('id', 'p1', 'p2', 'p3', 'pr1', 'pr2', 'pr3')
p1 <- c(sample(1:10, 5))
p2 <- c(sample(10:20, 5))
p3 <- c(sample(20:30, 5))
pr1 <- c(sample(1:10, 5))
pr2 <- c(sample(10:20, 5))
pr3 <- c(sample(20:30, 5))

mydf <- as.data.frame(matrix(c(id, p1, p2, p3, pr1, pr2, pr3), nrow = 5))
colnames(mydf) <- names

>mydf

   id p1 p2 p3 pr1 pr2 pr3
1  1  6  20 22 1   10  24
2  2  8  11 24 2   18  29
3  3  7  10 25 6   20  26
4  4  3  14 20 10  15  20
5  5  5  19 29 7   14  22

Quero que meus dados finalmente sejam assim:

id2 <- rep(c(1:5), each = 2)
names2 <- c('id', 'couple', 'q1', 'q2', 'q3')
couple <- rep(1:2, 5)
p1 <- c(sample(1:10, 5))
p2 <- c(sample(10:20, 5))
p3 <- c(sample(20:30, 5))
pr1 <- c(sample(1:10, 5))
pr2 <- c(sample(10:20, 5))
pr3 <- c(sample(20:30, 5))

mydf <- as.data.frame(matrix(c(id2, couple, p1, p2, p3, pr1, pr2, pr3), nrow = 10, ncol = 5))
colnames(mydf) <- names2

>mydf
   id couple q1 q2 q3
1   1      1  6 23 16
2   1      2 10 28 10
3   2      1  1 27 14
4   2      2  7 21 20
5   3      1  5 30 18
6   3      2 12  2 27
7   4      1 10  1 25
8   4      2 13  7 21
9   5      1 11  6 20
10  5      2 18  3 23

Ou, se isso não for possível, assim:

   id couple bb1 bb2 bb3 pbb1 pbb2 pbb3
1   1      1  6  23  16
2   1      2             10   28   10
3   2      1  1  27  14
4   2      2             7    21   20
5   3      1  5  30  18
6   3      2             12   2    27
7   4      1 10   1  25
8   4      2             13   7    21
9   5      1 11   6  20
10  5      2             18   3    23

Agora, para chegar lá, tentei a função derreter () e a função reunir () e parece que estou perto, mas ainda não está funcionando da maneira que eu quero.

observe, no meu conjunto de dados os nomes das variáveis são bb1: bb54 para o questionário do paciente e pbb1: pbb54 para o questionário proxy

Exemplo do que eu tentei

df_long <- df_reshape %>%
gather(testname, value, -(bb1:bb11), -(pbb1:pbb11), -id, -pgebdat, -p_age, na.rm=T) %>%
arrange(id)

questionAnswers(2)

yourAnswerToTheQuestion