2010-07-30 7 views
0

J'ai un groupe de personnes, avec un fichier texte séparé par un espace pour chaque personne. Dans ces fichiers, la valeur de droite indique la hauteur de cette personne cm et la valeur de gauche indique la date à %d/%m/%Y Format:R haut graphique par rapport à la date de naissance

09/05/1992 0 
17/03/1993 50 
02/08/1994 65.5 
03/12/1995 72 

Une hauteur de 0 marque la date de naissance de la personne.

Ce script R dessine un graphique des hauteurs de John et Amy et délivre en sortie au format PDF:

pdf("Heights.pdf") 

john <- read.table("John",sep="") 
names(john) <- c("time","height") 
jt <- strptime(john$time, "%d/%m/%Y") 
jh <- john$height 

amy <- read.table("Amy",sep="") 
names(amy) <- c("time","height") 
at <- strptime(amy$time, "%d/%m/%Y") 
ah <- amy$height 

plot(jt,jh,type="b",pch=20,col="red", 
xlab="Date",ylab="Height", 
ylim=c(min(jh,ah),max(jh,ah))) 
points(at,ah,type="b",pch=20,col="green") 
title("Heights") 

Comment puis-je étendre ce script:

  • graphique tous les fichiers dans le répertoire actuel se terminant par .heights? Faire le graphique relatif à la date de naissance de chaque personne?
+0

Question 1: Voulez-vous un pdf séparé pour chaque fichier .heights? Question 2: Pouvez-vous expliquer exactement ce que vous cherchez ici? – kmm

+0

@Kevin: Désolé de ne pas être clair. Je veux * étendre * fichier en cours, en changeant seulement les deux choses mentionnées. Donc non, je ne veux qu'un seul PDF. – Zaz

Répondre

2

Je pense que cela va le faire. Le tracé avec ggplot est le moyen le plus simple d'y aller. Vous pouvez améliorer l'intrigue à partir de là.

# Get all the files ending with .heights 
filelist <- list.files(pattern = "\\.heights") 

# Get all the data. Put into a single data.frame 
# Assuming that you don't have thousands of 
# files/measurements, rbind()ing shouldn't be too slow. 
df <- data.frame(person = character(), 
       dates = character(), 
       height = numeric()) 

# Iterate through, collecting the data into a data.frame 
for (fname in filelist){ 
    x <- read.table(fname, sep="", as.is = TRUE) 
    person <- gsub("\\.heights", "", fname) 
    names(x) <- c("dates", "height") 
    df <- rbind(df, data.frame(person = rep(person, times = nrow(x)), 
          dates = x$dates, 
          height = x$height)) 
} 

# Convert dates to POSIXct 
df$dates <- strptime(as.character(df$dates), "%d/%m/%Y") 
df$dates <- as.POSIXct(df$dates) 

# Plot with qplot 
require(ggplot2) 
pdf("Heights.pdf") 
qplot(dates, height, data = df, color = person) 
dev.off() 

# Plot with base graphics 
pdf("Heights_2.pdf") 
plot(df$dates, df$height, col = as.numeric(df$person)) 
dev.off() 
+0

'il n'y a pas de paquet appelé 'ggplot2' - est-il possible de le faire en utilisant seulement les commandes intégrées? – Zaz

+0

J'ai ajouté le code pour le traçage avec des graphiques de base. Il est plus laborieux d'ajouter une légende (si vous en voulez une), de changer les couleurs et les symboles, etc., alors que la plupart de ces choses sont gérées automatiquement par qplot. Si vous envisagez de faire des complots étendus, alors il vaut probablement la peine d'investir du temps pour apprendre ggplot. Vous pouvez l'installer avec install.packages ("ggplot2", dep = TRUE). L'aide en ligne excellente est à http://had.co.nz/ggplot2/ – kmm

+0

Ce code trace tous les fichiers comme une seule ligne, plutôt qu'une ligne pour chaque fichier. J'ai essayé d'éditer le code, mais je n'ai pas assez d'expérience avec ** R **. – Zaz

Questions connexes