1

如何计算列中前 4 个观察值的平均值?

c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)

例如,在上面我会得到 (50+60+50+60)/4 = 55。我只知道如何使用分位数,但它不适用于这个。

有任何想法吗?

4

6 回答 6

6

由于您只对前 4 个项目感兴趣,因此您可以使用partial sort而不是完整排序。如果你的向量很大,你可能会节省很多时间:

x <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)
idx <- seq(length(x)-3, length(x))
mean(sort(x, partial=idx)[idx])
# [1] 55
于 2013-04-15T16:46:22.793 回答
2

尝试这个:

vec <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)

mean(sort(vec, decreasing=TRUE)[1:4])

[1] 55
于 2013-04-15T16:32:10.490 回答
1

您可以使用订单功能。按 -x 排序以按降序给出值,并平均前 4 个:

x <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)

mean(x[order(-x)][1:4])
[1] 55
于 2013-04-15T18:31:20.597 回答
1

只是为了表明您可以quantile在本练习中使用:

mean(quantile(x,1-(0:3)/length(x),type=1))
#[1] 55

但是,其他答案显然更有效。

于 2013-04-15T17:46:15.067 回答
1

要与众不同!另外,请在发布之前尝试自己做一些研究。

x <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)    
mean(tail(sort(x), 4))
于 2013-04-15T16:32:57.413 回答
1

也许是这样的:

v <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)
mean(head(sort(v,decreasing=T),4))

首先,您sort的向量使最大值位于开头。然后head取该向量中的 4 个第一个值,然后取其平均值。

于 2013-04-15T16:32:16.223 回答