计算多个数据帧的平均值

beh*_*has 6 r

我想用R来绘制不同数据库系统的性能评估结果.对于每个系统,我加载了相同的数据,并在几次迭代中执行相同的查询.

单个系统的数据如下所示:

"iteration", "lines", "loadTime", "query1", "query2", "query3"
1, 100000, 120.4, 0.5, 6.4, 1.2
1, 100000, 110.1, 0.1, 5.2, 2.1
1, 50000, 130.3, 0.2, 4.3, 2.2

2, 100000, 120.4, 0.1, 2.4, 1.2
2, 100000, 300.2, 0.2, 4.5, 1.4
2, 50000, 235.3, 0.4, 4.2, 0.5

3, 100000, 233.5, 0.7, 8.3, 6.7
3, 100000, 300.1, 0.9, 0.5, 4.4
3, 50000, 100.2, 0.4, 9.2, 1.2
Run Code Online (Sandbox Code Playgroud)

我现在需要的(用于绘图)是包含这些测量的平均值的矩阵或数据帧.

目前我这样做:

# read the file
all_results <- read.csv(file="file.csv", head=TRUE, sep=",")

# split the results by iteration
results <- split(all_results, all_results$iteration)

# convert each result into a data frane
r1 = as.data.frame(results[1])
r2 = as.data.frame(results[2])
r3 = as.data.frame(results[3])

# calculate the average
(r1 + r2 +r3) / 3
Run Code Online (Sandbox Code Playgroud)

我可以把所有这些都放到一个函数中并计算for循环中的平均矩阵,但我有一种模糊的感觉,那就是必须有一个更优雅的解决方案.有任何想法吗?

如果我的结果不完整,例如,当一次迭代的行数少于其他迭代时,我该怎么办?

谢谢!

Pra*_*ani 4

如果我理解正确的话,在给定的数据库系统上,在每次“迭代”(1...N) 中,您将加载一系列数据集 (1,2,3) 并对它们运行查询。似乎最后您想要计算每个 DataSet 的所有迭代的平均时间。如果是这样,您实际上需要DataSetall_results表中添加一个附加列来标识数据集。我们可以按如下方式添加此列:

all_results <- cbind( data.frame( DataSet = rep(1:3,3) ), all_results )
> all_results
  DataSet iteration  lines loadTime query1 query2 query3
1       1         1 100000    120.4    0.5    6.4    1.2
2       2         1 100000    110.1    0.1    5.2    2.1
3       3         1  50000    130.3    0.2    4.3    2.2
4       1         2 100000    120.4    0.1    2.4    1.2
5       2         2 100000    300.2    0.2    4.5    1.4
6       3         2  50000    235.3    0.4    4.2    0.5
7       1         3 100000    233.5    0.7    8.3    6.7
8       2         3 100000    300.1    0.9    0.5    4.4
9       3         3  50000    100.2    0.4    9.2    1.2
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用包ddply中的函数plyr轻松提取每个数据集的加载和查询时间的平均值。

> ddply(all_results, .(DataSet), colwise(mean, .(loadTime, query1, query2)))
  DataSet loadTime    query1 query2
1       1 158.1000 0.4333333    5.7
2       2 236.8000 0.4000000    3.4
3       3 155.2667 0.3333333    5.9
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我强烈建议您查看 Hadley Wickham 的plyr软件包,了解一组丰富的数据操作函数