2013-12-19 3 views
2

Я получил температурную dataframe: Я принял температуру в градусах Цельсия каждый час в течение Evey один день, так что я получил CSV-файл, как это:Изменение формы data.frame в R

Day  Hour Temperature 
11/10/2013 9:00 6 
11/10/2013 10:00 11 
11/10/2013 11:00 13 
11/10/2013 12:00 6 
11/10/2013 13:00 8 
12/10/2013 9:00 7 
12/10/2013 10:00 8 
12/10/2013 11:00 11 
12/10/2013 12:00 18 
12/10/2013 13:00 12 
13/10/2013 9:00 15 
13/10/2013 10:00 8 
13/10/2013 11:00 11 
13/10/2013 12:00 16 
13/10/2013 13:00 9 

Я пытаюсь изменить порядок он в R, чтобы получить запись в день меняющегося текста заголовка:

Day  9:00 10:00 11:00 12:00 13:00 
11/10/2013 6  11 13 6  8 
12/10/2013 7  8 11 18 12 
13/10/2013 15  8 11 16  9 

Я попробовал несколько комбинаций cbind, sapply и уникальным, но я понятия не имею, если они правильные элементы R, чтобы изменить порядок мои данные. Рамка. Любая идея, предложение? Большое спасибо

+3

Посмотрите на функции 'dcast' в пакете reshape2. – Roland

+0

@ user2261983 См. Мой ответ на полезный способ предоставления данных другим людям, когда вы задаете вопрос. Использование 'dput (my_data)' является альтернативой. –

ответ

2

Ваши данные в качестве флага данных.

temperatures <- read.table(
    text = " Day  Hour Temperature 
    11/10/2013 9:00 6 
    11/10/2013 10:00 11 
    11/10/2013 11:00 13 
    11/10/2013 12:00 6 
    11/10/2013 13:00 8 
    12/10/2013 9:00 7 
    12/10/2013 10:00 8 
    12/10/2013 11:00 11 
    12/10/2013 12:00 18 
    12/10/2013 13:00 12 
    13/10/2013 9:00 15 
    13/10/2013 10:00 8 
    13/10/2013 11:00 11 
    13/10/2013 12:00 16 
    13/10/2013 13:00 9", 
    header = TRUE 
) 

Вот решение, предложенное Роланд, используя dcast.

library(reshape2) 
dcast(temperatures, Day ~ Hour, value.var = "Temperature") 

FYI, вы «перестройки» данные, а не «переназначения» его (что предполагает изменение порядка строк, но оставив колонки то же самое, использование sort или plyr::arrange для этого).


Использование базового R:

reshape(
    temperatures, 
    direction = "wide", 
    idvar  = "Day", 
    timevar = "Hour", 
    v.names = "Temperature" 
) 
+0

@JackRyan вы также можете вручную скомпоновать коэффициент, используя коэффициент (Hour, levels = paste0 (formatC (0:23, flag = "0", width = 2), ": 00")) '. –

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