2010-07-30 2 views
0

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

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

Как я могу продлить этот сценарий:

  • Graph все файлы в текущем каталоге, заканчивающемся .heights?
  • Диаграмма по отношению к дате рождения каждого человека?
+0

Вопрос 1: Вам нужен отдельный pdf-файл для каждого файла .hights? Вопрос 2: Вы можете точно объяснить, что именно вы ищете? – kmm

+0

@ Кевин: Извините, что я не понимаю. Я хочу * продлить * текущий файл, изменив только две упомянутые вещи. Так что нет, мне нужен только один PDF. – Zaz

ответ

2

Я думаю, что это сделаю. Построение графика с помощью 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() 
+0

'нет пакета под названием 'ggplot2'' - есть ли способ сделать это, используя только встроенные команды? – Zaz

+0

Я добавил код для построения с базовой графикой. Труднее добавить легенду (если хотите), изменить цвета и символы и т. Д., Тогда как большинство из этих вещей автоматически обрабатываются qplot. Если вы планируете делать обширный график, то, вероятно, стоит потратить время на изучение ggplot. Вы можете установить его с помощью install.packages ("ggplot2", dep = TRUE). Отличная интерактивная справка находится по адресу http://had.co.nz/ggplot2/ – kmm

+0

Этот код отображает все файлы как одну строку, а не одну строку для каждого файла. Я пробовал редактировать код, но у меня просто нет опыта с ** R **. – Zaz

Смежные вопросы