gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:34:55 30 4
gpt4 key购买 nike

我想使用 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com