Несоответствие размеров с использованием функции melt () в reshape2

Я пытаюсь преобразовать фрейм данных из «широкого» формата в «длинный» в R, используя функцию «расплав» в пакете «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, и это не помогло ...


person Sam Zipper    schedule 06.04.2016    source источник
comment
Если вы посмотрите на str(df.melt.id), каким-то образом столбец value стал массивом. Если вы приведете его к числовому, это нормально, но поведение кажется довольно ошибочным.   -  person alistaire    schedule 06.04.2016
comment
Это reshape2 вещь; reshape::melt.data.frame отлично работает.   -  person alistaire    schedule 06.04.2016
comment
Странный! Да, использование reshape отлично работает как с этим образцом, так и с моим исходным, большим фреймом данных. Спасибо за быструю помощь.   -  person Sam Zipper    schedule 06.04.2016
comment
Вам также следует отправить отчет об ошибке.   -  person alistaire    schedule 07.04.2016
comment
И попробуйте мой ответ: P   -  person    schedule 07.04.2016
comment
Отчет об ошибке отправлен, попытаться ответить!   -  person Sam Zipper    schedule 07.04.2016
comment
Проблема в том, что ваши исходные столбцы в data.frame являются массивами (они имеют длину один атрибут dim), и они не обрабатываются должным образом reshape2. Я отправил PR, чтобы исправить это.   -  person Kevin Ushey    schedule 07.04.2016


Ответы (1)


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

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