我有一个数据框列表,其中每个帧包含单个系统的相同类型的测量。如,
$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 :(得分:9)
使用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)
忘记matplot
,请改用ggplot
,例如,
p1 <- ggplot(all_data, aes(cumSize, cumloadTime, color = system)) + geom_line(); p1
p2 <- ggplot(all_data, aes(cumSize, query1, color = system)) + geom_line(); p2
答案 1 :(得分:7)
你可以使用熔化,强制转换,ldply,就像Richie建议的那样,ggplot2。
预先,
library(ggplot2) # load reshape, plyr, and ggplot2
首先,使用matplot,
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")
在我看来,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")