2017-11-22 5 views
0

1番目の値の平均値を10番目に計算し、11番目の値から15番目の平均値を計算し、16番目の値の平均値を計算する18日顷。ですから、基本的には、Xがベクトルで与えられた異なる値であるXth値の平均を計算したいと思います。たとえば:R:ベクトルからn個の異なる値の平均を計算する

y=c(1,1,2,3,2,1,4,5,3,6,7,5,6,7,8,4,2,4) 
x=c(10,5,3) 

その後、 第一、第二、第三の手段は次のようになります。

sum(1+1+2+3+2+1+4+5+3+6)/10 
sum(7+5+6+7+8)/5 
sum(4+2+4)/3 

あなたは私を助けてくださいことはできますか? ありがとう!

+0

'start = 1; (平均(y [開始:v]));のための のための(vのcumsum(x)のv) start = v + 1 } – Abdou

答えて

0
x <- cumsum(x) 
x <- c(1,x) 
for(i in 1:(length(x)+1)){ 
    print(mean(y[x[i-]:x[i+1]])) 
+0

ありがとうT_cat –

3

あなたはthis answerからsplitAt機能を借りることができます。

splitAt <- function(x, pos) { 
    unname(split(x, cumsum(seq_along(x) %in% pos))) 
} 

あなたは1から始まり、xの値の累積和に1を追加する必要がyを分割するには:

splitAt(y, c(1, cumsum(x)+1)) 

[[1]] 
[1] 1 1 2 3 2 1 4 5 3 6 

[[2]] 
[1] 7 5 6 7 8 

[[3]] 
[1] 4 2 4 

リストがあるので、lapplyまたはsapply

sapply(splitAt(y, c(1, cumsum(x)+1)), mean) 

[1] 2.800000 6.600000 3.333333 
+0

はい、私は 'splitAt'関数を変更して、' sapply'手続きをよりエレガントにすることができると思います。とにかく、そのままそのまま使えるようです。 – neilfws

+0

ありがとう!ニールフス –

関連する問題