2016-04-06 6 views
1

Я пытаюсь растопить фрейм данных из «широкого» формата в «длинный» формат в R, используя функцию «расплавить» в пакете «reshape2». Тем не менее, я сталкиваюсь с проблемой с размерами при попытке просмотра кадра выходных данных, которые у меня возникают при расшифровке. Вот пример:Измерение несоответствия с использованием расплава() в reshape2

# load reshape2 package 
require(reshape2) 

# sample data frame generated using dput 
df <- structure(list(year = c(2001, 2002, 2003, 2004), 
        aet = structure(c(493.1, 407.1, 476.7, 501.6), .Dim = 4L), 
        drainage = structure(c(5.4, 5.4, 5.4, 5.4), .Dim = 4L), 
        srunoff = structure(c(25.6, 24.3, 56.0, 50.3), .Dim = 4L)), 
       .Names = c("year", "aet", "drainage", "srunoff"), row.names = c(NA, 4L), class = "data.frame") 

# if i melt without specifying id.vars, it provides a warning but works works fine 
df.melt <- melt(df) 

# check output 
head(df.melt) 

# view output 
View(df.melt) 
# this works fine, and the data frame is visible in RStudio 

# now, melt while supplying year as an id variable 
df.melt.id <- melt(df, id.vars="year") 

# check output 
head(df.melt.id) 
# the first 6 lines of output print to the console menu, as normal 

# view output 
View(df.melt.id) 

Однако, когда я пытаюсь просмотреть df.melt.id кадр данных, я получаю следующее сообщение об ошибке:

Error in FUN(X[[i]], ...) : 
    dims [product 4] do not match the length of object [12] 

4 соответствует исходной длине данных кадр и 12 - как долго это должно быть. Если я проверю размеры с помощью dim(df.melt.id), он вернет соответствующий размер: [1] 12 3

Любые идеи о том, что здесь происходит? Я попытался повторно установить reshape2 и это не помогло ...

+0

Если посмотреть на 'ул (df.melt.id)', как-то столбец 'value' стал массивом. Если вы принуждаете его к числовому, это нормально, но поведение кажется довольно затруднительным. – alistaire

+1

Это вещь 'reshape2'; 'reshape :: melt.data.frame' отлично работает. – alistaire

+0

Странно! Да, использование 'reshape' отлично работает как на этом примере, так и на моем оригинальном, большем кадре данных. Спасибо за быструю помощь. –

ответ

1

Он работает с reshape2, когда вы это делаете:

df.melt.id <- as.data.frame.array(melt(df, id="year"))