2011-06-09 156 views
4

我有這個看似簡單的操作,我假設已經解決了以前的困難,但我找不到任何示例。rpy2轉換矩陣 - > DataFrame

在R環境中@data是DataFrame類型,但rpy2(2.2)正在返回Matrix。有沒有一種方法可以將m轉換爲DataFrame或使robjects.r(查詢)返回一個DataFrame?

from rpy2.robjects.packages import importr 
import rpy2.robjects as robjects 

fimport = importr('fImport') 

yahooImport = robjects.r('function(x) yahooImport(x)@data') 
qqq = yahooImport("QQQ") 

print type(qqq) 

回答

2

您可以嘗試顯式轉換到您的yahooImport函數中的data.frame。

以下爲我工作:

>>> yahooImport = robjects.r('function(x) as.data.frame(yahooImport(x)@data)') 

>>> print type(qqq) 
<class 'rpy2.robjects.vectors.DataFrame'> 
>>> qqq 
<DataFrame - Python:0x102412680/R:0x103c2b310> 
[Float..., Float..., Float..., Float..., Float..., Float...] 
    Open: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241a638/R:0x1048f1c00> 
[58.970000, 58.660000, 59.180000, ..., 102.250000, 102.870000, 102.250000] 
    High: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241acf8/R:0x104916000> 
[59.700000, 59.320000, 59.190000, ..., 102.310000, 103.470000, 102.310000] 
    Low: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241add0/R:0x10491c200> 
[58.920000, 58.340000, 58.500000, ..., 99.310000, 100.620000, 100.560000] 
    Close: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241aef0/R:0x10486f800> 
[59.600000, 58.990000, 58.600000, ..., 100.120000, 102.620000, 102.120000] 
    Volume: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241d050/R:0x104875a00> 
[43540100.000000, 70148800.000000, 57085500.000000, ..., 8743600.000000, 9688600.000000, 5232000.000000] 
    Adj.Close: <class 'rpy2.robjects.vectors.FloatVector'> 
    <FloatVector - Python:0x10241d170/R:0x10485a000> 
[59.600000, 58.990000, 58.600000, ..., 48.110000, 49.320000, 49.080000] 

yahooImport返回在內部表示爲矩陣,這是什麼原因造成的rpy2您的返回值是一個矩陣中的時間序列對象。