2010-07-23 6 views
9

J'ai des données sur un certain nombre de jours depuis un événement. Ces données sont échantillonnées irrégulièrement - mes points de temps sont comme 0, 5, 6, 10, 104 jours. Je n'ai pas d'informations précises sur la date, c'est-à-dire que je n'ai aucune idée quand, dans la vraie vie, l'événement que j'étudie a eu lieu. Je voudrais tracer, en utilisant ggplot, mes séries chronologiques. Je peux utiliser, direR + ggplot: traçage de séries chronologiques irrégulières

p <- ggplot(data,aes(x=time,y=expression)) 
p <- p + geom_point() 

mais bien sûr mes variables x-axes sont tracés à côté de l'autre, de sorte que la distance entre t = 10 et t = 104 est le même que t = 5 et t = 6 . Donc, je peux faire quelque chose comme

start <- ISOdate(2001, 1, 1, tz = "") 
data$time <- start + data$time*60*60*12 

qui fonctionne presque, mais maintenant les tiques sur mes x-axe sont horriblement temps de date inexactes. Je pourrais les reformater peut-être? Mais ne voit pas de toute façon faire le format "jours de départ". Et maintenant, je fais des recherches depuis un bon moment, avec le sentiment lancinant que je manque quelque chose de vraiment évident. Suis-je?

Répondre

4

sons comme votre variable time est un facteur ou peut-être un vecteur de caractère, pas une valeur numérique! Si vous faites data$time <- as.numeric(data$time) il pourrait bien résoudre votre problème. Ggplot est très bon pour utiliser le bon type d'échelle pour le bon type de données. (Malheureusement, les routines d'importation de données dans R sont généralement moins intelligentes ...)

+1

qui devrait être 'as.numeric (comme.character (data $ time))', ou 'as.numeric (niveaux (data $ time) [données $ time])'. Les pages d'aide disent que la seconde est un peu plus rapide. – JoFrhwld

+0

droite, si c'est un facteur. S'il s'agit déjà d'un vecteur de caractères, ce qui pourrait donner un résultat similaire, vous n'avez pas besoin de la conversion interne. – Harlan

+0

Je suis sûr que le temps commence comme un vecteur ol 'numérique régulier, puis une fois que je l'ai ajouté à 'start' c'est un vecteur datetime ou quelque chose. –

9

Vous ne savez pas si c'est ce que vous recherchez (voir this related question). Vous pouvez reformater l'axe et gérer l'irrégularité en utilisant les fonctions scale_x. Par exemple:

p <- qplot(1:3, 1:3, geom='line') 
p + scale_x_continuous("", breaks=1:3, 
     labels = as.Date(c("2010-06-03", "2010-06-04", "2010-06-07"))) 

Soit dit en passant, voici une fonction que j'ai créé pour tracer zoo à variables multiples objets:

qplot.zoo <- function(x) { 
    if(all(class(x) != "zoo")) stop("x must be a zoo object") 
    x.df <- data.frame(dates=index(x), coredata(x)) 
    x.df <- melt(x.df, id="dates", variable="value") 
    ggplot(x.df, aes(x=dates, y=value, group=value, colour=value)) + geom_line() + opts(legend.position = "none") 
} 
+0

Merci! mais il s'est avéré que la stupidité brute de ma part était à blâmer. Qu'est-ce qu'un objet de zoo? –

+0

@Mike: 'zoo' est probablement la classe de séries temporelles la plus populaire dans R: http://cran.r-project.org/web/packages/zoo/index.html – Shane

+0

awesome. Je ne suis pas encore allé près des cours de séries chronologiques de R. Je travaille sur des séries chronologiques d'expression génique pour le moment, qui ont peut-être 6 ou 7 points de temps au mieux! Pas besoin de classes dédiées (en dehors des ExpressionSets de Bioconductor) pour le moment! –

Questions connexes