2015-01-27 6 views
0

У меня есть данные, которые следующую форму:Группировка данных из кадра данных

first second data_col1 data_col2 data_col3 
lu NA  <number> <number> <number> 
lu NA  <number> <number> <number> 
lu NA  <number> <number> <number> 
lu NA  <number> <number> <number> 
lu mult <number> <number> <number> 
lu mult <number> <number> <number> 
lu mult <number> <number> <number> 
lu mult <number> <number> <number> 
mult NA  <number> <number> <number> 
mult NA  <number> <number> <number> 
mult NA  <number> <number> <number> 
mult NA  <number> <number> <number> 

И так далее.

Я хочу сгруппировать эти данные с помощью первых двух столбцов и построить их отдельно.

Я пытаюсь сделать это:

comb <- unique(total.df[c(1,2)]) 
apply(comb, 1, function(x) { 
    d<-total.df[total.df$guess==FALSE & 
       total.df$second==x[2] & 
       total.df$first==x[1] & 
       total.df$tasks=='tasks_const',] 
    p = ggplot(d, aes(x=d$platform, y=d$time, 
        group=as.factor(d$sched), 
      colour=as.factor(d$sched))) + 
     geom_point() + geom_line() 
    ggsave(filename=sprintf("/tmp/a_%s_%s.png", x[1], x[2])) 
}) 

Мой гребень выглядит следующим образом:

 first second 
1  mult  <NA> 
121  lu  mult 
241  lu  <NA> 
361  heat  mult 
481  heat  lu 
601  heat  <NA> 
721 cholesky  mult 
841 cholesky  lu 
961 cholesky  heat 
1081 cholesky  <NA> 
1201 pipeline  mult 
1321 pipeline  lu 
1441 pipeline  heat 
1561 pipeline cholesky 
1681 pipeline  <NA> 
1801  gen  mult 
1921  gen  lu 
2041  gen  heat 
2161  gen cholesky 
2281  gen pipeline 
2401  gen  <NA> 

facet_wrap практически решает свою задачу, но я хочу каждое изображение, чтобы отделиться, чтобы иметь возможность видеть то, что на самом деле там. И с facet_wrap каждый из них слишком мал.

код с facet_wrap заключается в следующем:

ggplot(total.df, aes(x=total.df$platform, y=total.df$time, 
     group=as.factor(total.df$sched), 
     colour=as.factor(total.df$sched))) + 
geom_point() + geom_line() + facet_wrap(first ~ second); 
+1

Вам не нужно указать 'total.df' в вашем вызове' AES() '. Первый аргумент 'ggplot' указывает кадр данных. Итак, 'aes (x = total.df $ platform, ...' можно упростить до 'aes (x = platform)' например. – davechilders

ответ

2

я бы, вероятно, предложить черчения каждый график на другой странице одного PDF-файла. Я мог бы также рекомендовал использовать data.table, как это делает вещи выглядеть лучше:

library(data.table) 
total.dt <- data.table(total.df) 
setkey(total.dt, first, second) 
comb <- unique(total.dt[, list(first, second)]) 

pdf("test.pdf") 
for(n in 1:nrow(comb)){ 
    d <- total.dt[comb[n, ]][guess == FALSE & tasks == "tasks_const"] 
    print(ggplot(d, aes(x = platform, y = time, 
         group = as.factor(sched), 
         colour = as.factor(sched))) + 
     geom_point() + geom_line() + 
     ggtitle(sprintf("first=%s, second=%s", comb[n, first], comb[n, second])))} 
dev.off()  
Смежные вопросы