对于那些不想安装R也能完成这个任务(r2py需要R)的人,有一个新的包“pyreadr”,它允许在不需要任何依赖的情况下直接将RData和Rds文件读入python。
它是C库librdata的包装器,因此非常快速。
您可以使用pip轻松安装:
pip install pyreadr
举个例子,你会这样做:
import pyreadr
result = pyreadr.read_r('/path/to/file.RData') # also works for Rds
# done! let's see what we got
# result is a dictionary where keys are the name of objects and the values python
# objects
print(result.keys()) # let's check what objects we got
df1 = result["df1"] # extract the pandas data frame for object df1
仓库在这里:https://github.com/ofajardo/pyreadr
免责声明:我是这个软件包的开发者。
人们在 R-help 和 R-dev 列表上问这种问题,通常的答案是代码是 .RData
文件格式的文档。因此,在任何其他语言中实现它都很难。
我认为唯一合理的方法是安装 RPy2 并从中使用 R 的 load
函数,同时将其转换为适当的 Python 对象。注意,.RData
文件可以包含结构化对象以及普通表格。
链接:http://rpy.sourceforge.net/rpy2/doc-2.4/html/
快速:
>>> import rpy2.robjects as robjects
>>> robjects.r['load'](".RData")
对象现在已经加载到 R 工作空间中。
>>> robjects.r['y']
<FloatVector - Python:0x24c6560 / R:0xf1f0e0>
[0.763684, 0.086314, 0.617097, ..., 0.443631, 0.281865, 0.839317]
那是一个简单的标量,d是一个数据框,我可以通过子集获取列:
那是一个简单的标量,d是一个数据框,我可以通过子集获取列:
>>> robjects.r['d'][0]
<IntVector - Python:0x24c9248 / R:0xbbc6c0>
[ 1, 2, 3, ..., 8, 9, 10]
>>> robjects.r['d'][1]
<FloatVector - Python:0x24c93b0 / R:0xf1f230>
[0.975648, 0.597036, 0.254840, ..., 0.891975, 0.824879, 0.870136]
from rpy2.robjects import numpy2ri
然后 numpy2ri.ri2numpy(r['d'])
。然后您就可以以“Pythonic”的方式操作Numpy数组了。 - jonathanrochernp.array( r['d'] )
,而我在 numpy2ri
中不再需要 ri2numpy
。 - daknowles如果您正在使用 Jupyter Notebook,您需要执行以下两个步骤:
步骤 1:前往http://www.lfd.uci.edu/~gohlke/pythonlibs/#rpy2并下载 Python 接口到 R 语言(嵌入式 R)。在我的情况下,我将使用 rpy2-2.8.6-cp36-cp36m-win_amd64.whl
这个文件。
把这个文件放在当前的工作目录中。
步骤 2:进入您的 Jupyter Notebook 并输入以下命令。
# This is to install rpy2 library in Anaconda
!pip install rpy2-2.8.6-cp36-cp36m-win_amd64.whl
然后
# This is important if you will be using rpy2
import os
os.environ['R_USER'] = 'D:\Anaconda3\Lib\site-packages\rpy2'
然后
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()
这将允许您在Python中使用R函数。现在,您必须按照以下方式导入readRDS
readRDS = robjects.r['readRDS']
df = readRDS('Data1.rds')
df = pandas2ri.ri2py(df)
df.head()
df.to_pickle('Data1')
df1=pd.read_pickle('Data1')
我几年前遇到了和你一样的问题。我想要读取我的一个开发库中的 .RData
文件。我考虑使用 RPy2,但这将迫使我使用 GPL 许可证发布我的库,而我不想这样做。
那时 "pyreadr" 还不存在。此外,我想要加载的数据集并没有像 data.frame
一样具有标准化格式。
我看到了Spacedman 的答案,特别是其中的一行:
So any other implementation in any other language is hard++.
作为一种挑战,我在几天内实现了rdata 包。这是一个非常小的纯 Python 实现的 .RData
解析器和转换器,可以满足我到现在为止的需求。将原始对象解析并转换为适当的 Python 对象的步骤是分开的,因此用户可以使用不同的转换方法。此外,用户可以添加自定义 R 类的构造函数。
这是一个用法示例:
>>> import rdata
>>> parsed = rdata.parser.parse_file(rdata.TESTDATA_PATH / "test_vector.rda")
>>> converted = rdata.conversion.convert(parsed)
>>> converted
{'test_vector': array([1., 2., 3.])}
正如我所说,我开发了这个包并且一直在使用中没有遇到问题,但是我没有花时间为它提高可见性,因为我没有恰当地记录文档。最近这种情况已经改变,现在文档基本上还不错,所以对于任何有兴趣的人,这里是链接:
有一个第三方库叫做 rpy
,你可以使用这个库来加载 .RData
文件。你可以通过 pip install
命令来安装它:pip install rpy
。如果你还没有安装 rpy
,那么我建议你先了解一下如何安装它。否则,你可以直接执行以下命令:
from rpy import *
r.load("file name here")
看起来我有些过时了,现在有rpy2可以使用。
rpy
吗?那很棒。 - Brandon Bertelsen@rsc05的回答适用于笔记本用户,对我有用,但显然其中一个函数[df = pandas2ri.ri2py(df)
]已被弃用,现在应该是df = pandas2ri.rpy2py(df)
。
因此,完整的解决方案应该如下:
# import the libraries
>> import rpy2.robjects as robjects
>> from rpy2.robjects import pandas2ri
#activate
>> pandas2ri.activate()
# create readRDS object
>> readRDS = robjects.r['readRDS']
# read .rds using readRDS object
>> df = readRDS('sri_testing_data.rds')
# convert the data into native dataframe object
>> df = pandas2ri.rpy2py(df)
#print the dataframe
>> df.head()
试试这个
!pip install pyreadr
那么
result = pyreadr.read_r('/content/nGramsLite.RData')
# objects
print(result.keys()) # let's check what objects we got
>>>odict_keys(['ngram1', 'ngram2', 'ngram3', 'ngram4'])
df1 = result["ngram1"]
df1.head()
完成了!
pip install readr
和conda install -c conda-forge pyreadr
安装了相关依赖。我已经成功将 RData 导入 Python 中,但是我无法访问其中的数据。即使是一个基本的 3x2 的 RData 文件,df.keys()
返回的也是odict_keys([None])
。是 Python 还是 R 发生了一些变化需要更新,还是我漏掉了什么? - gmarais.RData
文件时,出现了错误LibrdataError: Unable to convert string to the requested encoding
。不同的.RData
文件可以正常工作,但是我需要的数据格式的文件无法加载,真是让人费解!这种情况发生的常见原因有哪些? - AcidCatfish