Если я правильно понимаю, что вы хотите, вы можете собрать все в очень длинную форму, а затем изменить форму обратно в чуть более широкую форму:

я большой набор данных: 240 случаев, представляющих 240 пациентов. Все они прошли нейропсихологические тесты и заполнили анкеты. Кроме того, их значимые другие (далее - прокси) также заполнили анкеты. Так как «пациент» и «прокси» вложены в «пары», я хочу провести многоуровневый анализ в R. Для этого мне нужно изменить форму набора данных, чтобы выполнить такой анализ.

Проще говоря, я хочу «продублировать» свои строки. Для двойных идентификаторов субъектов добавьте новую переменную с 1 и 2, где 1 обозначает данные пациента, а 2 обозначает данные прокси. Затем я хочу, чтобы строки были заполнены 1. всеми данными пациента и столбцами, содержащими данные прокси-сервера, которые должны быть NA или пустыми или какими-либо другими, и 2. всеми данными прокси-сервера, и всеми данными пациента NA или пустыми.

Допустим, это мои данные:

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

Я хочу, чтобы мои данные наконец-то выглядели так:

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

Или, если это невозможно, вот так:

   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

Теперь, чтобы добраться до меня, я попробовал функцию melt () и функцию collect (), и мне кажется, что я близок, но все же он работает не так, как я хочу.

обратите внимание, в моем наборе данных имена переменных bb1: bb54 для анкеты пациента и pbb1: pbb54 для анкеты с доверенностью

Пример того, что я пробовал

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

Ответы на вопрос(1)

Ваш ответ на вопрос