2010-05-14 20 views
2

Je voudrais fondre la dataframe pour que dans une colonne j'ai des dates dans une seconde j'ai le nom d'utilisateur comme variable et enfin la valeur.Je reçois une erreur en essayant d'utiliser melt() sur un dataframe contenant des dates.

Je reçois cette erreur:

Erreur dans as.Date.numeric (valeur): « origine » doit être fourni

et je suis sûr que pas exactement si je comprends l'erreur comment contourner.

Un petit échantillon des données est:

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")) 

Merci pour votre aide.

Répondre

4

Essayez de convertir la variable created_at en un vecteur de caractères. melt ne semble pas aimer la classe cast_df, mais j'ai eu du succès en réinitialisant la classe à seulement data.frame. Comme si:

df <- as.data.frame(df) 
df$created_at <- as.character(df$created_at) 
library(reshape) 
melt(df) 
+0

je donne wkmor1 la coche parce qu'il a d'abord et a résolu le problème. Cela dit, Marek merci de m'avoir aidé à mieux comprendre ce qui se passait. – Dan

2

erreur Vous est causée par rbind utilisé dans melt, ce qui est conséquence de mauvaises données à fondre. Je ne sais pas comment vous créez votre cast_dfdata.frame, mais il manque des attributs (idvars et rdimnames) qui sont requis par melt.cast_df.

C'est pourquoi la solution wkmor1 fonctionne, melt.data.frame n'a pas besoin de ces arguments. Et sans conversion Date à character il peut être fait que:

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