In [1]:
from functools import partial
from rpy2.ipython import html
html.html_rdataframe=partial(html.html_rdataframe, table_class="docutils")
/home/laurent/Desktop/software/python/py36_env/lib/python3.6/site-packages/rpy2-3.2.7-py3.6-linux-x86_64.egg/rpy2/robjects/pandas2ri.py:14: FutureWarning: pandas.core.index is deprecated and will be removed in a future version.  The public classes are available in the top-level namespace.
  from pandas.core.index import Index as PandasIndex
/home/laurent/Desktop/software/python/py36_env/lib/python3.6/site-packages/rpy2-3.2.7-py3.6-linux-x86_64.egg/rpy2/robjects/pandas2ri.py:34: UserWarning: pandas >= 1.0 is not supported.
  warnings.warn('pandas >= 1.0 is not supported.')

tidyr in Python

In [2]:
from rpy2.robjects.lib.tidyr import DataFrame
/home/laurent/Desktop/software/python/py36_env/lib/python3.6/site-packages/rpy2-3.2.7-py3.6-linux-x86_64.egg/rpy2/robjects/lib/tidyr.py:13: UserWarning: This was designed againt tidyr version 0.8.3 but you have 1.0.2
  'but you have %s' % (TARGET_VERSION, tidyr.__version__))

(note: dplyr is implicitly used by tidyr.)

In addition to that, and because this tutorial is in a notebook, we initialize HTML rendering for R objects (pretty display of R data frames).

In [3]:
import rpy2.ipython.html
rpy2.ipython.html.init_printing()
In [4]:
from collections import OrderedDict
from rpy2.robjects.vectors import (StrVector,
                                   IntVector)
dataf = DataFrame(OrderedDict(x=StrVector(("a", "b", "b")),
                              y=IntVector((3, 4, 5)),
		              z=IntVector((6, 7, 8))))
dataf
Out[4]:
DataFrame with 3 rows and 3 columns:
x y z
0 1 a 3 6
1 2 b 4 7
2 3 b 5 8
In [5]:
dataf.spread('x', 'y')
Out[5]:
DataFrame with 3 rows and 3 columns:
z a b
0 1 6 3 NA_integer_
1 2 7 NA_integer_ 4
2 3 8 NA_integer_ 5

Reuse. Get things done. Don't reimplement.