r - 计算多个数据帧的平均值

标签 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

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

目前我正在这样做:
# 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

我可以将所有这些放入一个函数中并在 for 循环中计算平均矩阵,但我有一种模糊的感觉,即必须有一个更优雅的解决方案。有任何想法吗?

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

谢谢!

最佳答案

如果我理解正确的话,在给定的数据库系统上,在每个“迭代”(1...N)中,您正在加载一系列数据集(1,2,3)并对其运行查询。最后,您似乎想计算所有迭代的平均时间,对于每个数据集 .如果是这样,您实际上需要增加一列 DataSet在您的 all_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

现在您可以使用 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

顺便说一句,我强烈建议你看看 Hadley Wickham 的 plyr package丰富的数据处理功能

关于r - 计算多个数据帧的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4737753/

相关文章:

r - GAM 模型错误

r - 将图像添加到 Shiny 的应用程序

r - 用于正则表达式捕获组的 R 函数是什么?

r - 在 R parallel::mcparallel 中,是否有可能限制一次使用的内核数量?

r - 使用循环查找列表之间的匹配单词

r - 您可以使用 Replace() 从文本字符串在 R 中创建函数吗?

R 错误消息 - "arguments imply differing number of rows"

r - 将绝对值转换为 R 中图表的范围

R:按组对 NA 进行插值

使用 dplyr 重新编码多列