Изменить форму данных панели из широкого формата в длинный

Я борюсь с преобразованием набора данных панели из широкого в длинный формат. Набор данных выглядит так:

ID | KP1_430a | KP1_430b | KP1_430c | KP2_430a | KP2_430b | KP2_430c | KP1_1500a | ...  
1     ....
2     ....

KP1; KP2 до KP7 описывают Волны. a, b до f описывают конкретный элемент. (Например, размещение партии a слева направо)

Я хотел бы иметь эти данные в длинном формате. Примерно так:

ID | Party | Wave | 430 | 1500  
 1     1       1     ..    ..
 1     2       1     ..    ..
 .     .       .          
 1     1       2     ..    ..
 .     .       .         
 2     1       1     ..    ..  

Я пробовал использовать функцию изменения формы. Но у меня были проблемы с его изменением со временем и по партиям одновременно.

Вот небольшой пример data.frame.

data <- data.frame(matrix(rnorm(10),2,10))  
data[,1] <- 1:2  
names(data) <- c("ID","KP1_430a" , "KP1_430b" , "KP1_430c" , "KP2_430a" , "KP2_430b ", "KP2_430c ", "KP1_1500a" ,"KP1_1500b", "KP1_1500c")

И вот как далеко я зашел.

  data_long <- reshape(data,varying=list(names(data)[2:4],names(data)[5:7], names(data[8:10]),  
                            v.names=c("KP1_430","KP2_430","KP1_1500"),  
                           direction="long", timevar="Party")

Остается вопрос: как я могу получить переменные, зависящие от времени, в длинном формате? И есть ли более элегантный способ изменить форму этих данных? В приведенном выше коде мне нужно было бы ввести имена (имена (данные) [2: 4]) для каждой волны и переменной. С этим маленьким data.frame все в порядке, но Dataset намного больше.

РЕДАКТИРОВАТЬ: Как это преобразование может быть выполнено вручную: я действительно сделал это, в результате чего у меня остался файл кода длиной в страницу.
Сначала свяжите KP1_430a и KP1_1500a с идентификаторами, Time = 1 и Party = 1 по столбцам. Во-вторых, создайте один и тот же объект для всех сторон [b-f], изменив индекс партии соответственно, и добавьте его построчно. Выполните первый и второй шаги для остальных волн [2-7], соответственно изменив party и time var, и добавьте их построчно.

5
задан lstoetze 26 January 2012 в 08:51
поделиться