График высот R - относительно даты рождения - PullRequest
0 голосов
/ 30 июля 2010

У меня есть группа людей, с разделенным пробелами текстовым файлом для каждого человека.В этих файлах правое значение указывает рост этого человека в cm, а левое значение указывает дату в формате %d/%m/%Y:

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

Высота 0 обозначает дату рождениячеловек.

Этот R скрипт рисует график высот Джона и Эми и выводит его в 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")

Как мне расширить этот скриптto:

  • График всех файлов в текущем каталоге, заканчивающийся .heights?
  • Сделать график относительно даты рождения каждого человека?

1 Ответ

2 голосов
/ 02 августа 2010

Я думаю, что это сделает это.Создание графиков с помощью ggplot - самый простой способ.Оттуда вы можете красиво оформить сюжет.

# 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...