Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算分位数的平均值_R_Quantile - Fatal编程技术网

R 计算分位数的平均值

R 计算分位数的平均值,r,quantile,R,Quantile,考虑以下向量: vec = rnorm(1000) 我想计算这个向量的五分位数,然后平均每个五分位数的向量值 我知道得到分位数的方法是: qtle = quantile(vec, seq(from = 0, to = 1, by = 0.2) 但我不确定如何有效地计算每个分位数内值的平均值(即底部20%的平均值,下一个20%的平均值等) 有什么想法吗 谢谢。为此,您可以使用findInterval和tapply set.seed(1) vec = rnorm(1000) qs <- q

考虑以下向量:

vec = rnorm(1000)
我想计算这个向量的五分位数,然后平均每个五分位数的向量值

我知道得到分位数的方法是:

qtle = quantile(vec, seq(from = 0, to = 1, by = 0.2)
但我不确定如何有效地计算每个分位数内值的平均值(即底部20%的平均值,下一个20%的平均值等)

有什么想法吗


谢谢。

为此,您可以使用
findInterval
tapply

set.seed(1)
vec = rnorm(1000)
qs <- quantile(vec, seq(from = 0, to = 1, by = 0.2))
tapply(vec, findInterval(vec, qs), mean)
#        1        2        3        4        5        6 
# -1.46746 -0.54260 -0.02399  0.54492  1.41894  3.81028 
set.seed(1)
vec=rnorm(1000)

qs上述解有许多缺陷,即当向量有许多相同的值或 集合是奇怪的,那么findInterval方法并没有像我们希望的那样工作

这是我的简单解决方案

averageQuantile<- function(vec, value, value2) {
  chunk = getChunkOfVector(vec, value, value2)
  if(length(chunk) >0) {
    return(mean(chunk))
  }
  return(0.0)
}

getChunkOfVector<- function(vector, value, value2) {
  len = length(vector)
  result<-vector()
  vector<-sort(vector)
  k<-1
  for(i in vector){
    if(k/len > value & k/len <= value2) {
      result = append(result, i)
    }
    k<-k+1

  }
  return(result)
}

非常感谢。回答得好!
set.seed(1)
vec = rnorm(1000)
averageQuantile(vec, 0.25, 0.50)
# [1] -0.3397659