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

时间:2013-04-15 16:28:59

标签: r max mean

如何计算我专栏中前4个观测值的平均值?

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

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

有什么想法吗?

6 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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个第一个值,然后取其平均值。

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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

然而,其他答案显然更有效率。

答案 5 :(得分: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