Сумма значений по квантилям

У меня простой вопрос. Есть ли функция, которая генерирует сумму значений для набора заранее определенных квантилей?

Скажем, у меня есть вектор example.data со 100 значениями

Я бегу quantile(example.data, seq(0,1, by = 0.1)) и получаю

0%   10%   20%   30%   40%   50%   60%   70%   80%   90% 
0.040 0.090 0.186 0.227 0.336 0.450 0.584 0.670 0.730 0.832 
 100% 
1.000 

Для каждого квантиля я хотел бы видеть не точку отсечения, а сумму значений для наблюдений в каждом квантиле. Есть ли параметр в квантиле или аналогичная функция, которая включает такой параметр?

Большое спасибо...


person idomeneus    schedule 27.03.2015    source источник
comment
Вам что-то мешает написать собственную функцию?   -  person ExperimenteR    schedule 27.03.2015
comment
Как насчет сброса данных в hist?   -  person Carl Witthoft    schedule 27.03.2015
comment
@ExperimenteR - может, не хотите изобретать велосипед?   -  person idomeneus    schedule 27.03.2015
comment
@CarlWitthoft - Я понял, Карл, спасибо, что предложил помощь ...   -  person idomeneus    schedule 27.03.2015


Ответы (2)


quantile дает вам квантили, а не суммы значений внутри квантилей: это принципиально разные вещи.

Однако вы можете использовать cut и split для получения желаемого результата:

q = quantile(x, seq(0, 1, by = 0.1))
cuts = cut(x, q)
values_per_quantile = split(x, cuts)
sums = sapply(values_per_quantile, sum)
person Konrad Rudolph    schedule 27.03.2015
comment
Получил часть о функции квантиля ... Было только интересно, можно ли его расширить, чтобы сделать дополнительный трюк ... Что касается вашего решения, оно работает и супер. Единственное, что мне нужно сейчас настроить, это то, что некоторые из перерывов не уникальны. Я вложил разрезы в уникальную функцию, и она работает, но я также где-то нашел предложение смещать паузы. Как это сработает? Код примера выглядел примерно так breaks = c(-Inf,quantile(a[,paste(i,1,sep=".")], na.rm=T),Inf) breaks = breaks + seq_along(breaks) * .Machine$double.eps - person idomeneus; 27.03.2015

Пытаться:

tapply(example.data,findInterval(example.data,quantile(example.data, seq(0,1, by = 0.1))),sum)
person nicola    schedule 27.03.2015