2015-11-11 2 views
0

Мне нужна помощь, преобразующая длинный df в широкую.Reshape2: data.frame от длинного до широкого

Я думаю, что это основные вопросы, но я застрял.

После прочтения о'reshape2', я использовал это:

dcast(a, day + sessions ~ hour) 

И все возможные варианты.

Но не получил ожидаемого результата.

Это мой исходный кадр данных "а":

голова (а)

day hour sessions 
1 Sun 0  785 
2 Sun 1  354 
3 Sun 2  190 
4 Sun 3  121 
5 Sun 4  105 
6 Sun 5  110 

Ожидаемый результат: мне нужно иметь следующий формат:

day 0  1 2 3  ... 23 
1 Sun 123 454 23 43 ... 56 
2 Mon 56  354 778 76 ....89 
3 Thur 75  190 653 533 ....87 
4 Wen 3  121 45 54 ....77 
5 Tue 4  105 21 44 ....52 
6 Fri 5  110 12 21 ....51 

ул ДФ "a":

'data.frame': 168 obs. of 3 variables: 
$ day  : Ord.factor w/ 7 levels "Sun"<"Mon"<"Tues"<..: 1 1 1 1 1 1 1 1 1 1 ... 
$ hour : Factor w/ 24 levels " 0"," 1"," 2",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ sessions: num 785 354 190 121 105 110 185 258 252 416 ... 
+0

ухода разработать немного больше о ошибке, которую вы получаете – MLavoie

+1

Попробуйте 'dcast (a, day ~ hour)' – ialm

+1

Когда вы отправляете образцы данных, вы должны приложить усилия, чтобы построить образец ответа, который не противоречит этим данным. Это, безусловно, вопрос, который имеет ответ на SO. Вы также должны опубликовать некоторые записи об усилиях, которые вы вложили в поиск. –

ответ

1

Как упоминалось в комментариях @ialm, это легко сделать, используя пакет reshape2.

Я не знаю, что ваш dataframe действительно выглядит, так как ваш пример это немного странно, но:

library(reshape2) 

a <- data.frame(
day = c('Sun', 'Sun', 'Mon', 'Mon'), 
hour = c(1, 2, 1, 2), 
sessions = c(354, 190, 121, 105)) 

dcast(a, day ~ hour) 

... должен дать вам

day 1 2 
1 Mon 121 105 
2 Sun 354 190 
+0

Спасибо, Мэтт. Вот и все. –

Смежные вопросы