Сума от стойности по квантил

Имам един лесен въпрос. Има ли функция, която генерира сумата от стойности за набор от предварително определени квантили?

Да кажем, че имам вектор 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