rpy2:将data.frame转换为numpy数组
-
28-09-2019 - |
题
我在R中有一个data.frame。它包含许多数据:来自许多(125)阵列的基因表达水平。我希望使用Python中的数据,这主要是由于我在R语言方面的能力不足以及应该做30分钟的事实。
我希望以下代码能够正常工作。要理解此代码,请知道变量path
包含我数据集的完整路径,该数据集在加载后会给我一个名为immgen
的变量。知道immgen
是一个对象(Bioconductor的ExpressionSet
对象),并且exprs(immgen)
返回的数据框包含125列(实验)和数万行(命名基因)。 (以防万一,这是Python代码,使用robjects.r调用R代码)
通用标签
此代码运行,但是expression_data
只是array([[1]])
。
我非常确定由于以下原因,e
不会代表exprs()
生成的数据框:
通用标签
然后又是谁知道?即使e
确实代表了我的data.frame,也不会将其直接转换为数组就足够了-一个数据框比数组(行名和同名)更多,所以也许生活不那么容易。但是我仍然不知道如何执行转换。尽管我对文档标题的了解有限,但这对我来说还是太简练了。
有任何想法吗?
解决方案
为什么当'exprs(immgen)'返回/ matrix /并且您的最终目标是将数据存储在矩阵中时,为什么要通过data.frame?
将矩阵传递给numpy很简单(甚至可以不创建副本而实现): http://rpy.sourceforge。net / rpy2 / doc-2.1 / html / numpy.html#from-rpy2-to-numpy
这应该既简单又有效地击败了通过平面文件中的数字数据的文本表示来交换数据的建议。
您似乎正在研究生物导体类,并且可能对以下内容感兴趣: http://pypi.python.org/pypi/rpy2-bioconductor-extensions/
其他提示
这是我发现的将数据帧从R传输到Python的最直接,最可靠的方法。
首先,我认为通过R绑定交换数据是不必要的麻烦。 R提供了一种导出数据的简单方法,同样,NumPy也提供了不错的数据导入方法。文件格式是此处唯一需要的通用接口。 通用标签
根据文档(以及我自己的经验), loadtxt 是常规数据导入的首选方法。
您还可以将数据类型的元组(参数为 dtypes )传递给 loadtxt ,该元组中的每一列都有一个项目。请注意,'skiprows= 1'可以跳过列标题(对于 loadtxt 行从1开始索引,列从0开始索引)。
最后,我在导出之前将数据帧因子转换为整数(实际上是因子的基础数据类型),“ unclass”可能是最简单的方法。
如果您有大数据(即,不想将整个数据文件加载到内存中,但仍需要访问它),则 NumPy的内存映射数据结构(“ memmap”)是不错的选择: 通用标签