Digamos que eu tenho os iris
dados.
Eu sei que posso criar uma variável que mostra os valores que se enquadram em um determinado percentil:
library(tidyverse)
iris %>% mutate(Range = cut(Sepal.Length, quantile(Sepal.Length, probs=c(0,.2,.4,.6,.8,1)),include.lowest=TRUE))
Isso produz:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Range
1 4.3 3.0 1.1 0.1 setosa [4.3,4.6]
2 4.4 2.9 1.4 0.2 setosa [4.3,4.6]
3 4.6 3.1 1.5 0.2 setosa [4.3,4.6]
4 4.6 3.4 1.4 0.3 setosa [4.3,4.6]
5 4.7 3.2 1.3 0.2 setosa (4.6,4.8]
6 4.8 3.4 1.6 0.2 setosa (4.6,4.8]
7 4.8 3.0 1.4 0.1 setosa (4.6,4.8]
8 4.9 3.0 1.4 0.2 setosa (4.8,5]
9 4.9 3.1 1.5 0.1 setosa (4.8,5]
10 5.0 3.6 1.4 0.2 setosa (4.8,5]
11 5.0 3.4 1.5 0.2 setosa (4.8,5]
12 5.1 3.5 1.4 0.2 setosa (5,5.4]
13 5.4 3.9 1.7 0.4 setosa (5,5.4]
14 5.4 3.7 1.5 0.2 setosa (5,5.4]
15 5.7 4.4 1.5 0.4 setosa (5.4,5.8]
16 5.8 4.0 1.2 0.2 setosa (5.4,5.8]
Como posso também criar outra variável que mostre o intervalo de percentil em que a observação cai? Não quero criar manualmente a variável com instruções ifelse, etc., mas espero que haja uma função que a crie automaticamente.
Estou procurando algo que produza uma tabela como esta:
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Percent Range
1 4.3 3.0 1.1 0.1 setosa [4.3,4.6] [0,.2]
2 4.4 2.9 1.4 0.2 setosa [4.3,4.6] [0,.2]
3 4.6 3.1 1.5 0.2 setosa [4.3,4.6] [0,.2]
4 4.6 3.4 1.4 0.3 setosa [4.3,4.6] [0,.2]
5 4.7 3.2 1.3 0.2 setosa (4.6,4.8] (.2,.4]
6 4.8 3.4 1.6 0.2 setosa (4.6,4.8] (.2,.4]
7 4.8 3.0 1.4 0.1 setosa (4.6,4.8] (.2,.4]
8 4.9 3.0 1.4 0.2 setosa (4.8,5] (.4,.6]
9 4.9 3.1 1.5 0.1 setosa (4.8,5] (.4,.6]
10 5.0 3.6 1.4 0.2 setosa (4.8,5] (.4,.6]
11 5.0 3.4 1.5 0.2 setosa (4.8,5] (.4,.6]
12 5.1 3.5 1.4 0.2 setosa (5,5.4] (.6,.8]
13 5.4 3.9 1.7 0.4 setosa (5,5.4] (.6,.8]
14 5.4 3.7 1.5 0.2 setosa (5,5.4] (.6,.8]
15 5.7 4.4 1.5 0.4 setosa (5.4,5.8] [.8,1]
16 5.8 4.0 1.2 0.2 setosa (5.4,5.8] [.8,1]
Sim, a seção Veja também da
?quantile
página de ajuda indicará aecdf
função "para distribuições empíricas quequantile
são inversas" .Curiosamente,
ecdf()
é um funcional, então temos que criar uma função com ele, e então chamar essa função na entrada. Podemos então obtercut
o resultado exatamente como você fez com os quantis.Uma abordagem usando
cut
comlabels=
, garantirá que você obtenha intervalos correspondentessaída