rpy2将矩阵转换为数据框(DataFrame)

4

我在这个看似简单的操作中遇到了困难,我认为这个问题以前已经解决过,但是我找不到任何例子。

在R环境中,@data是DataFrame类型,但是rpy2(2.2)返回的是Matrix。是否有一种方便的方法将m转换为DataFrame或使robjects.r(query)返回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)
1个回答

2
你可以尝试在你的yahooImport函数中明确地转换为data.frame。
以下方法适用于我:
```R myData <- data.frame(yahooImport(...)) ```
>>> 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返回一个timeSeries对象,该对象在内部表示为矩阵,这就是导致您在rpy2中返回矩阵值的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接