Похоже, что это можно легко сделать в два этапа, хотя может быть более простой метод, который мне не хватает. Чтобы немного упростить проблему, я удалил столбец DATE, но его можно добавить обратно после изменения формы фрейма данных, если это абсолютно необходимо. Сначала расплавьте фрейм:
intermediate <- melt(test, id.vars = c("CLIENT_CODE", "TIME"))
Это даст фрейм данных с 4 столбцами: CLIENT_CODE, TIME, variable и value. Столбец переменной содержит номер вопроса, а столбец значения содержит ответ. Затем вы можете привести этот промежуточный кадр в нужную вам форму.
final <- dcast(intermediate, CLIENT_CODE ~ variable + TIME, value.var = "value")
Эта окончательная версия содержит столбцы с комбинациями времени и вопроса, и функция приведения автоматически переименовывает столбцы в той форме, для которой вы задали запрос (например, "q1_1", "q2_2" и т. Д. c.), но дает их в другом порядке, поэтому вам, возможно, придется немного переставить.