Подтвердить что ты не робот

Можно ли использовать rpy2 для сохранения фрейма pandas в файл .Rdata?

Я раньше не использовал rpy2, но мне просто интересно, могу ли я использовать его для сохранения объекта python (a pandas DataFrame) в R-читаемом файле. У меня возникли проблемы с перемещением объектов между этими средами главным образом из-за того, что я использую Windows, а источником данных является файл Excel. Да, тип, в котором есть ячейки с текстом, включая перевернутые запятые, строки новой строки и все, что CSV не может обрабатывать должным образом.

Я обычно полагаюсь на XLConnectJars, но он, кажется, сломан.

Installing package(s) into ‘C:/Program Files/R/library’
(as ‘lib’ is unspecified)
trying URL 'http://cran.csiro.au/bin/windows/contrib/2.15/XLConnectJars_0.2-4.zip'
Content type 'application/zip' length 16538311 bytes (15.8 Mb)
opened URL
downloaded 15.3 Mb

Warning in install.packages :
  downloaded length 16011264 != reported length 16538311

pandas читает его правильно, но мне нужно использовать информацию в R.

4b9b3361

Ответ 1

Вы можете использовать rpy2 для этого. После того, как у вас есть данные в panda, вы должны передать его R. Эта ссылка предоставляет экспериментальный интерфейс между Python Pandas и R data.frames. Пример кода, скопированный с веб-сайта:

from pandas import DataFrame
import pandas.rpy.common as com

df = DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]},
                index=["one", "two", "three"])
r_dataframe = com.convert_to_r_dataframe(df)

print type(r_dataframe)
 <class 'rpy2.robjects.vectors.DataFrame'>

print r_dataframe
      A B C
one   1 4 7
two   2 5 8
three 3 6 9

Ответ 2

Вот как вы пишете/читаете .RData файлы с помощью rpy2 (так как принятое решение устарело и не показывает, как сохранить файл .RData):

import rpy2
from rpy2 import robjects
from rpy2.robjects import pandas2ri
pandas2ri.activate()

# read .RData file as a pandas dataframe
def load_rdata_file(filename):
    r_data = robjects.r['get'](robjects.r['load'](filename))
    df = pandas2ri.ri2py(r_data)
    return df

# write pandas dataframe to an .RData file
def save_rdata_file(df, filename):
    r_data = pandas2ri.py2ri(df)
    robjects.r.assign("my_df", r_data)
    robjects.r("save(my_df, file='{}')".format(filename))