In [1]:

    from functools import partial
    from rpy2.ipython import html
    html.html_rdataframe=partial(html.html_rdataframe, table_class="docutils")

# tidyr in Python¶

In [2]:

    from rpy2.robjects.lib.tidyr import DataFrame

    /home/laurent/Desktop/software/python/py38_env/lib/python3.8/site-packages/rpy2/robjects/lib/tidyr.py:12: UserWarning: This was designed against tidyr versions starting with 1.1. but you have 1.2.0
      warnings.warn(

(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.