2010-09-20 11 views
1

У меня есть большой набор данных с повторной оценкой по предметам. Как мне идти:R reorder dataframe внутри предмета

subj, assessment, test1, test2 
A, 1,   10, 20 
A, 2,   12, 13 
A, 3,   11, 12 
B, 1,   14, 14 
B, 2,   13, 12 

To:

subj, test1_1, test1_2, test1_3 
A, 10,  12,  11 
B, 14,  13 

Спасибо,

Jon

ответ

2

вы можете легко сделать это, используя отличную RESHAPE/reshape2 пакет Хэдли. вот код, который доставит вас к тому, что вам нужно

library(reshape); 
df = melt(df, id = c('subj', 'assessment')); 
df = cast(df, subj ~ variable + assessment); 

дайте мне знать, если это сработает для вас.

+1

Я считаю, что должно быть «переменная» вместо «тест "в формуле отливки, например: df = cast (df, subj ~ variable + evaluation). (Если вы не добавите переменную_имя = "тест" в предыдущую строку). – Fojtasek

+0

это право. спасибо, что указали это. я изменил код соответственно – Ramnath

2

Функция Reshape (в статистике) делает это довольно легко:

reshape(data, timevar='assessment', idvar='subj', dir='wide') 

Или просто получить результаты для test1:

reshape(subset(data, select=-test2), timevar='assessment', idvar='subj', dir='wide')