resultado de la asignación de psycopg2 en trama de datos para R con RPY2
Pregunta
Con psycopg2, consigo resultado de la consulta en esta forma:
[(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)]
Estoy tratando de convertir esta tupla / lista anidada en I trama de datos con RPY2: con nueve columna con nombre, y cuatro fila de datos (número de elemento en esta lista anidada))
Pero no entiendo cómo, yo estoy tratando con taggedList (en la biblioteca de contenedores RPY2) pero sin éxito .. Parece lista etiquetados para llevar una lista de una sola lista.
Thx por la ayuda!
Solución
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
Nota que hay una R interfaz para postgresql , y esto puede proporcionar una forma más limpia de pasar por Python y rpy2.
Si necesita Python, otra posibilidad consiste en averiguar los comandos R necesarios para cargar los datos de PostgreSQL, y luego llamarlos en Python usando ro.r
.