Ordinati quantile significa via RPY
Domanda
Il vero obiettivo è quello di trovare i mezzi quantile (o somme, o mediana, ecc) in Python. Dal momento che io non sono un power user di Python, ma ho usato R per un po ', il mio percorso scelto è tramite RPY. Tuttavia, mi sono imbattuto nel problema che l'elenco restituito di mezzi non sono corrispondenti all'ordine dei quantili. In particolare, ho i seguenti in R:
> a = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
> b = c(2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000)
> prob = seq(0,5)/5
> br = quantile(a,prob)
> rcut = cut(a, br, include.lowest = TRUE)
> quintile_means = tapply(b, rcut, mean)
> quintile_means
[1,2.8] (2.8,4.6] (4.6,6.4] (6.4,8.2] (8.2,10]
3 30 300 3000 30000
che è tutto molto buono. Tuttavia, se io traduco il codice in RPY, ho ricevuto
>>> import rpy
>>> from rpy import r
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> b = [2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000]
>>> prob = [ x / 5.0 for x in range(6)]
>>> br = r.quantile(a, prob)
>>> rcut = r.cut(a, br, include_lowest=r.TRUE)
>>> quintile_means = r.tapply(b, rcut, r.mean)
>>> print quintile_means
[30.0, 300.0, 3000.0, 30000.0, 3.0]
Si noti l'elenco definitivo è mis-ordinate (Lo sappiamo perché a
e b
sono entrambi ordinati in questo caso). In generale, devo solo modo di recuperare l'ordine corretto dal più basso al più alto quantile in RPY. Qualche suggerimento?
In aggiunta (non in sostituzione, come mi piacerebbe sapere la risposta alla domanda di cui sopra), se si può suggerire un modo per eseguire direttamente l'analisi in python, che sarà grande anche. (Non ho NumPy o SciPy installato.) Thx!
Modifica : Per chiarire, a
e b
sono Paired , ma non necessariamente ha ordinato . Ad esempio, a
è la dimensione degli occhi e b
è la dimensione del naso. Sto cercando di scoprire che nei vari quantili di a
, quali sono i mezzi dei b
s corrispondenti. Grazie.
Soluzione
Se non avete bisogno di etichette (per esempio: (8.2,10]
) allora si potrebbe chiamare cut
con labels=FALSE
. Questo dovrebbe mantenere l'ordine (e velocizzare il tuo codice per libero).
Altri suggerimenti
Prova rpy2.
Con rpy2> = 2.1.0, questo potrebbe essere:
from rpy2.robjects.vectors import IntVector
from rpy2.robjects.packages import importr
base = importr('base')
stats = importr('stats')
a = IntVector((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
b = IntVector((2, 4, 20, 40, 200, 400, 2000, 4000, 20000, 40000))
prob = base.seq(0,5).ro / 5
br = stats.quantile(a,prob)
rcut = base.cut(a, br, include_lowest = True)
quintile_means = base.tapply(b, rcut, stats.mean)
print(quintile_means)
Ho appena non hanno alcun modo di recuperare la corretto ordine dal più basso al più alto quantile in RPY
Se l'ordinamento della lista dal più basso al più alte risolve il problema, provare sorted(quintile_means)
.