2011-01-20 9 views
8

私はデータフレームのリストを持っています。各フレームには単一のシステムの同じ種類の測定値が含まれています。例えば、いくつかのデータフレームを1つの拡張フレームにマージする

$system1       
       file cumSize  cumloadTime  query1 
1 ../data/data1.dat 100000  158.1000  0.4333333 
2 ../data/data2.dat 200000  394.9000  0.5000000 
3 ../data/data3.dat 250000  561.8667  0.6666667 

$system2       
       file cumSize  cumloadTime  query1 
1 ../data/data1.dat 100000  120.1000  0.4333333 
2 ../data/data2.dat 200000  244.9000  0.4500000 
3 ../data/data3.dat 250000  261.8667  0.2666667 

は今、私はmatplotコマンドを使用して別のプロットにこれらのデータフレームのいくつかの側面を表示したいと思います。したがって、私は次の出力構造に上記の入力データ構造を変換する必要があります。

$cumloadTime 

cumSize  system1  system2 
100000  158.1000 120.1000 
200000  394.9000 244.9000 
250000  561.8667 261.8667 

$query1 

cumSize  system1  system2 
100000  0.4333333 0.4333333 
200000  0.5000000 0.4500000 
250000  0.6666667 0.2666667 

私はリシェイプで遊ん、をマージし、機能を溶かすが、まだ解決策を見つけていません。

+0

はあなたの変数ケーシングを見る:私はあなたが意味を考えます'cumloadTime'ではなく' cumLoadTime'です。 –

答えて

8

がすべてを含む1つのデータフレームを作成するためにrbindを使って任意のヒントについて

おかげで...。

data_list <- list() 
data_list[["system1"]] <- read.table(tc <- textConnection("file cumSize  cumloadTime  query1 
1 ../data/data1.dat 100000  158.1000  0.4333333 
2 ../data/data2.dat 200000  394.9000  0.5000000 
3 ../data/data3.dat 250000  561.8667  0.6666667"), header = TRUE); close(tc) 

data_list[["system2"]] <- read.table(tc <- textConnection("file cumSize  cumloadTime  query1 
1 ../data/data1.dat 100000  120.1000  0.4333333 
2 ../data/data2.dat 200000  244.9000  0.4500000 
3 ../data/data3.dat 250000  261.8667  0.2666667"), header = TRUE); close(tc) 

for(n in names(data_list)) data_list[[n]]$system <- n 

all_data <- do.call(rbind, data_list) 

p1 <- ggplot(all_data, aes(cumSize, cumloadTime, color = system)) + geom_line(); p1 
p2 <- ggplot(all_data, aes(cumSize, query1, color = system)) + geom_line(); p2 
+4

'' do.call(rbind、data_list)のより速い代替手段は '' melt/cast/ldply'の使い方を示す '' plyr :: rbind.fill(data_list) '' – hadley

7

あなたが溶融、キャスト、リッチーが提案ldply、およびとして、ggplot2を使用することができ、例えば、matplotを忘れて代わりにggplotを使用しています。

事前に、

library(ggplot2) # load reshape, plyr, and ggplot2 

私の意見では

d2 <- ldply(data_list) 
cast(d2, cumSize~.id, value_var="cumloadTime") 
cast(d2, cumSize~.id, value_var="query1") 
matplot(d.cum, type="l") 
matplot(d.que, type="l") 

、matplotを使用するには、まず、ggplot2は良い仕事します:

d3 <- melt(d2, measure=c("cumloadTime", "query1")) 
ggplot(d3, aes(cumSize, value, colour=.id)) + geom_line() + 
    facet_wrap(~variable, nrow=2, scale="free_y") 
+1

+1です。 –

関連する問題