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 bs corrispondenti. Grazie.

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top