2010-09-20 31 views
2

Avec psycopg2, i obtenir résultat de requête dans cette forme:résultat de la cartographie des psycopg2 en trame de données pour R avec RPY2

[(15.002.325, 24, 20, 1393, -67333094L, 38, 4, 493,48763257822799 , 493,63348372593703), (15.002.339, 76, 20, 1393, -67333094L, 91, 3, 499,95845909922201, 499,970048093743), (15.002.431, 24, 20, 1394, -67333094L, 38, 4, 493,493464900383, 493,63348372593703), (15002483, 76, 20, 1394, -67333094L, 91, 3, 499,959042442434, 499,97304310494502)]

Je suis en train de convertir cette tuple/liste imbriquée dans R dataframe avec RPY2: avec neuf colonnes avec le nom, et quatre lignes de données (nombre d'éléments dans cette liste imbriquée))

Mais je ne comprendre comment, j'essaye avec taggedList (dans la bibliothèque de récipient RPY2) mais sans succès. Il semble que la liste étiquetée prenne une liste par une liste seulement.

Thx pour de l'aide!

Répondre

1
import rpy2.robjects as ro 
r=ro.r 

data=[(15002325, 24, 20, 1393, -67333094L, 38, 4, 493.48763257822799, 493.63348372593703), (15002339, 76, 20, 1393, -67333094L, 91, 3, 499.95845909922201, 499.970048093743), (15002431, 24, 20, 1394, -67333094L, 38, 4, 493.493464900383, 493.63348372593703), (15002483, 76, 20, 1394, -67333094L, 91, 3, 499.959042442434, 499.97304310494502)] 
columns=zip(*data) 
columns=[ro.FloatVector(col) for col in columns] 
names=['col{i}'.format(i=i) for i in range(9)] 
dataf = r['data.frame'](**dict(zip(names,columns))) 
print(dataf) 

#  col8 col6  col7  col4 col5 col2 col3  col0 col1 
# 1 493.6335 4 493.4876 -67333094 38 20 1393 15002325 24 
# 2 499.9700 3 499.9585 -67333094 91 20 1393 15002339 76 
# 3 493.6335 4 493.4935 -67333094 38 20 1394 15002431 24 
# 4 499.9730 3 499.9590 -67333094 91 20 1394 15002483 76 

Notez qu'il existe un R interface for postgresql, ce qui peut fournir un moyen plus propre que de passer par Python et rpy2.

Si vous avez besoin de Python, vous pouvez également déterminer les commandes R nécessaires pour charger les données de postgresql, puis les appeler en Python à l'aide de ro.r.

+0

Thx pour une réponse! Je préfère RPY2 que l'interface postgresqlR, en raison de la guerre entre différents R <-> Pgsql interface. – reyman64