如何计算我专栏中前4个观测值的平均值?
c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)
例如,在上面我会有(50 + 60 + 50 + 60)/ 4 = 55.我只知道如何使用分位数,但它不适用于此。
有什么想法吗?
答案 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