Я получаю сообщение об ошибке при попытке использовать melt () на кадре данных, содержащем даты - PullRequest
3 голосов
/ 14 мая 2010

Я бы хотел растопить dataframe, чтобы в одном столбце у меня были даты, а во втором - имя пользователя в качестве переменной и, наконец, значение.

Я получаю эту ошибку:

Ошибка в as.Date.numeric (значение): необходимо указать 'origin'

и хотя я понимаю ошибку, я не совсем уверен, как ее обойти.

Небольшая выборка данных:

structure(list(created_at = structure(c(14007, 14008, 14009, 
14010, 14011, 14012), class = "Date"), benjamin = c(16, 0, 0, 
0, 0, 0), byron = c(0, 0, 0, 0, 0, 0), cameronc = c(0, 0, 0, 
0, 0, 0), daniel = c(0, 0, 0, 0, 0, 0), djdiaz = c(0, 0, 0, 0, 
0, 0), gene = c(16, 77, 64, 38, 72, 36), joel = c(0, 0, 0, 0, 
0, 2), kerem = c(0, 0, 0, 0, 0, 0), sophia = c(0, 0, 0, 0, 0, 
0), SuperMoonMan = c(0, 0, 0, 0, 0, 0)), .Names = c("created_at", 
"benjamin", "byron", "cameronc", "daniel", "djdiaz", "gene", 
"joel", "kerem", "sophia", "SuperMoonMan"), row.names = c(NA, 
6L), class = c("cast_df", "data.frame"))

Спасибо за вашу помощь.

Ответы [ 2 ]

4 голосов
/ 14 мая 2010

Попробуйте преобразовать переменную created_at в символьный вектор. Классу melt также не нравится класс cast_df, но я добился успеха, установив класс на data.frame. Вот так:

df <- as.data.frame(df)
df$created_at <- as.character(df$created_at)
library(reshape)
melt(df)
3 голосов
/ 14 мая 2010

Ваша ошибка вызвана rbind, использованным в melt, что является следствием неправильных данных для расплавления. Я не знаю, как вы создаете cast_df data.frame, но в нем отсутствуют атрибуты (idvars и rdimnames), необходимые для melt.cast_df.

Именно поэтому решение wkmor1 работает, melt.data.frame эти аргументы не нужны. И без преобразования Date в character это можно сделать так:

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