2010-09-20 167 views
2

隨着psycopg2,我得到這種形式的查詢結果:映射結果

[(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)]

我想這個嵌套的元組/列表轉換成R數據幀與RPY2:九列有姓名,(在此嵌套列表元素的數量)四列的數據)

但我不理解如何,我試圖與taggedList(進入RPY2容器庫),但沒有成功。它似乎標記列表只有一個列表只有一個列表。

Thx求助!

回答

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 

注意,有一個R interface for postgresql,這可以提供比通過Python和rpy2去一個更清潔的方式。

如果您需要Python,另一種可能性是找出從postgresql加載數據所需的R命令,然後使用ro.r在Python中調用它們。

+0

Thx for answer!我比RPG2更喜歡postgresqlR接口,因爲不同的R <-> Pgsql接口之間的戰爭。 – reyman64 2010-09-20 14:37:01