如何计算列中前 4 个观察值的平均值?
c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)
例如,在上面我会得到 (50+60+50+60)/4 = 55。我只知道如何使用分位数,但它不适用于这个。
有任何想法吗?
由于您只对前 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
尝试这个:
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
您可以使用订单功能。按 -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
只是为了表明您可以quantile
在本练习中使用:
mean(quantile(x,1-(0:3)/length(x),type=1))
#[1] 55
但是,其他答案显然更有效。
要与众不同!另外,请在发布之前尝试自己做一些研究。
x <- c(12, 13, 15, 1, 5, 9, 34, 50, 60, 50, 60, 4, 6, 8, 12)
mean(tail(sort(x), 4))
也许是这样的:
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 个第一个值,然后取其平均值。