[
  {
    "path": ".codesandbox/Dockerfile",
    "content": "FROM python:3.10.12\r\n\r\nRUN apt-get update && apt-get install -y npm fish && \\\r\n    pip install -U pip && \\\r\n    pip install poetry && \\\r\n    poetry config virtualenvs.create false && \\\r\n    chsh -s /usr/bin/fish"
  },
  {
    "path": ".codesandbox/setup.sh",
    "content": "WORKSPACE=\"/workspace\"\n\n# Install python dependencies\npoetry update && poetry install\n\ncd $WORKSPACE\n\n# Install whichpy\nWHICHPY=\"https://gist.githubusercontent.com/pwwang/879966128b0408c2459eb0a0b413fa69/raw/2f2573d191edec1937a2bf0873aa33a646b5ef29/whichpy.fish\"\ncurl -sS $WHICHPY -o ~/.config/fish/functions/whichpy.fish\n"
  },
  {
    "path": ".coveragerc",
    "content": "[report]\nexclude_lines =\n    pragma: no cover\n    if TYPE_CHECKING:\nomit =\n    datar/datasets.py\n    */site-packages/*\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug Report\ndescription: Report incorrect behavior in the datar library\ntitle: \"[BUG] \"\nlabels: [bug]\n\nbody:\n  - type: checkboxes\n    id: checks\n    attributes:\n      label: datar version checks\n      options:\n        - label: >\n            I have checked that this issue has not already been reported.\n          required: true\n        - label: >\n            I have confirmed this bug exists on the\n            **latest version** of datar and its backends.\n          required: true\n  - type: textarea\n    id: problem\n    attributes:\n      label: Issue Description\n      description: >\n        Please provide a description of the issue shown in the reproducible example.\n    validations:\n      required: true\n  - type: textarea\n    id: expected-behavior\n    attributes:\n      label: Expected Behavior\n      description: >\n        Please describe or show a code example of the expected behavior.\n    validations:\n      required: true\n  - type: textarea\n    id: version\n    attributes:\n      label: Installed Versions\n      description: >\n        Please paste the output of ``datar.get_versions()``\n      value: >\n        <details>\n\n\n        Replace this line with the output of datar.get_versions()\n\n\n        </details>\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: Feature Request\ndescription: Suggest an idea for datar\ntitle: \"[ENH] \"\nlabels: [enhancement]\n\nbody:\n  - type: checkboxes\n    id: checks\n    attributes:\n      label: Feature Type\n      description: Please check what type of feature request you would like to propose.\n      options:\n        - label: >\n            Adding new functionality to datar\n        - label: >\n            Changing existing functionality in datar\n        - label: >\n            Removing existing functionality in datar\n  - type: textarea\n    id: description\n    attributes:\n      label: Problem Description\n      description: >\n        Please describe what problem the feature would solve, e.g. \"I wish I could use datar to ...\"\n      placeholder: >\n        I wish I could use datar to port the purrr package from R.\n    validations:\n      required: true\n  - type: textarea\n    id: feature\n    attributes:\n      label: Feature Description\n      description: >\n        Please describe how the new feature would be implemented, using psudocode if relevant.\n      placeholder: >\n        Add a new module `datar.purrr` with functions `map`, `map2`, `map_df`, etc.\n    validations:\n      required: true\n  - type: textarea\n    id: context\n    attributes:\n      label: Additional Context\n      description: >\n        Please provide any relevant GitHub issues, code examples or references that help describe and support\n        the feature request.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/submit_question.yml",
    "content": "name: Submit Question\ndescription: Ask a general question about datar\ntitle: \"[QST] \"\nlabels: [question]\n\nbody:\n  - type: textarea\n    id: question\n    attributes:\n      label: Question about datar\n      description: >\n        Try to provide a clear and concise description of your question.\n      placeholder: |\n        ```python\n        # Your code here, if applicable\n\n        ```\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n  pull_request:\n  release:\n    types: [published]\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: [3.9, \"3.10\", \"3.11\", \"3.12\"]\n\n    steps:\n      - uses: actions/checkout@v6\n      - name: Install uv\n        uses: astral-sh/setup-uv@v8.0.0\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Install dependencies\n        run: uv sync\n      - name: Run flake8\n        run: uv run flake8 datar\n      - name: Test with pytest\n        run: uv run pytest tests/ --junitxml=junit/test-results-${{ matrix.python-version }}.xml\n      - name: Upload pytest test results\n        uses: actions/upload-artifact@v7\n        with:\n          name: pytest-results-${{ matrix.python-version }}\n          path: junit/test-results-${{ matrix.python-version }}.xml\n        # Use always() to always run this step to publish test results when there are test failures\n        if: ${{ always() }}\n      - name: Run codacy-coverage-reporter\n        uses: codacy/codacy-coverage-reporter-action@master\n        if: matrix.python-version == 3.12\n        with:\n          project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}\n          coverage-reports: cov.xml\n\n  deploy:\n    needs: build\n    runs-on: ubuntu-latest\n    if: github.event_name == 'release'\n    strategy:\n      matrix:\n        python-version: [\"3.12\"]\n    steps:\n      - uses: actions/checkout@v6\n      - name: Install uv\n        uses: astral-sh/setup-uv@v8.0.0\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Build and publish to PyPI\n        run: |\n          uv build\n          uv publish --username ${{ secrets.PYPI_USER }} --password ${{ secrets.PYPI_PASSWORD }}\n        if: success()\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "name: Build Docs\n\non: [push]\n\njobs:\n  docs:\n    runs-on: ubuntu-latest\n    # if: github.ref == 'refs/heads/master'\n    strategy:\n      matrix:\n        python-version: [\"3.12\"]\n    steps:\n      - uses: actions/checkout@v4\n      - name: Install uv\n        uses: astral-sh/setup-uv@v5\n        with:\n          python-version: ${{ matrix.python-version }}\n      - name: Install dependencies\n        run: uv sync --group docs\n      - name: Build docs\n        run: |\n          # python -m pip install -r docs/requirements.txt\n          uv run python -m ipykernel install --user --name python --display-name python\n          uv run python -m ipykernel install --user --name python3 --display-name python3\n          cd docs\n          cp ../README.md index.md\n          cp ../example.png example.png\n          cp ../example2.png example2.png\n          # cp ../logo.png logo.png\n          cd ..\n          uv run mkdocs build\n        if : success()\n      - name: Deploy docs\n        run: |\n          uv run mkdocs gh-deploy --clean --force\n        # if: success() && github.ref == 'refs/heads/master'\n\n  fix-index:\n    needs: docs\n    runs-on: ubuntu-latest\n    # if: github.ref == 'refs/heads/master'\n    strategy:\n      matrix:\n        python-version: [\"3.12\"]\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          ref: gh-pages\n      - name: Fix index.html\n        run: |\n          echo ':: head of index.html - before ::'\n          head index.html\n          sed -i '1,5{/^$/d}' index.html\n          echo ':: head of index.html - after ::'\n          head index.html\n        if: success()\n      - name: Commit changes\n        run: |\n          git config --local user.email \"action@github.com\"\n          git config --local user.name \"GitHub Action\"\n          git commit -m \"Add changes\" -a\n        if: success()\n      - name: Push changes\n        uses: ad-m/github-push-action@master\n        with:\n          github_token: ${{ secrets.GITHUB_TOKEN }}\n          branch: gh-pages\n        if: success()\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n\n# PyInstaller\n#  Usually these files are written by a python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n.coverage.xml\ncov.xml\n*,cover\n.hypothesis/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# IPython Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# dotenv\n.env\n\n# virtualenv\nvenv/\nENV/\n\n# Spyder project settings\n.spyderproject\n\n# Rope project settings\n.ropeproject\n\nworkdir/\nnode_modules/\n_book/\n.vscode\nexport/\n*.svg\n*.dot\n*.queue.txt\nsite/\n\n# poetry\n# poetry.lock\n\n# backup files\n*.bak\n\ndocs/index.md\ndocs/logo.png\ndocs/example.png\ndocs/example2.png\ndocs/api/\ndocs/*.nbconvert.ipynb\ndocs/*/*.nbconvert.ipynb\n\n# vscode's local history extension\n.history/\n\n# For quick test\n/_t.py\n/_t.ipynb\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "fail_fast: true\nrepos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: 5df1a4bf6f04a1ed3a643167b38d502575e29aef\n    hooks:\n    -   id: trailing-whitespace\n    -   id: end-of-file-fixer\n    -   id: check-yaml\n        exclude: 'mkdocs.yml'\n-   repo: local\n    hooks:\n    -   id: flake8\n        name: Run flake8\n        files: ^datar/.+$\n        pass_filenames: false\n        entry: flake8\n        args: [datar]\n        types: [python]\n        language: system\n    -   id: versionchecker\n        name: Check version agreement in pyproject and __version__\n        entry: bash -c\n        language: system\n        args:\n            - get_ver() { echo $(egrep \"^__version|^version\" $1 | cut -d= -f2 | sed 's/\\\"\\| //g'); };\n              v1=`get_ver pyproject.toml`;\n              v2=`get_ver datar/__init__.py`;\n              if [[ $v1 == $v2 ]]; then exit 0; else exit 1; fi\n        pass_filenames: false\n        files: ^pyproject\\.toml|datar/__init__\\.py$\n    -   id: pytest\n        name: Run pytest\n        entry: pytest\n        language: system\n        args: [tests/]\n        pass_filenames: false\n        files: ^tests/.+$|^datar/.+$\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 pwwang\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# datar\n\nA Grammar of Data Manipulation in python\n\n<!-- badges -->\n[![Pypi][6]][7] [![Github][8]][9] ![Building][10] [![Docs and API][11]][5] [![Codacy][12]][13] [![Codacy coverage][14]][13] [![Downloads][20]][7]\n\n[Documentation][5] | [Reference Maps][15] | [Notebook Examples][16] | [API][17]\n\n`datar` is a re-imagining of APIs for data manipulation in python with multiple backends supported. Those APIs are aligned with tidyverse packages in R as much as possible.\n\n## Installation\n\n```shell\npip install -U datar\n\n# install with a backend\npip install -U datar[pandas]\n\n# More backends support coming soon\n```\n\n<!-- ## Maximum compatibility with R packages\n\n|Package|Version|\n|-|-|\n|[dplyr][21]|1.0.8| -->\n\n## Backends\n\n|Repo|Badges|\n|-|-|\n|[datar-numpy][1]|![3] ![18]|\n|[datar-pandas][2]|![4] ![19]|\n|[datar-arrow][22]|![23] ![24]|\n\n## Example usage\n\n```python\n# with pandas backend\nfrom datar import f\nfrom datar.dplyr import mutate, filter_, if_else\nfrom datar.tibble import tibble\n# or\n# from datar.all import f, mutate, filter_, if_else, tibble\n\ndf = tibble(\n    x=range(4),  # or c[:4]  (from datar.base import c)\n    y=['zero', 'one', 'two', 'three']\n)\ndf >> mutate(z=f.x)\n\"\"\"# output\n        x        y       z\n  <int64> <object> <int64>\n0       0     zero       0\n1       1      one       1\n2       2      two       2\n3       3    three       3\n\"\"\"\n\ndf >> mutate(z=if_else(f.x>1, 1, 0))\n\"\"\"# output:\n        x        y       z\n  <int64> <object> <int64>\n0       0     zero       0\n1       1      one       0\n2       2      two       1\n3       3    three       1\n\"\"\"\n\ndf >> filter_(f.x>1)\n\"\"\"# output:\n        x        y\n  <int64> <object>\n0       2      two\n1       3    three\n\"\"\"\n\ndf >> mutate(z=if_else(f.x>1, 1, 0)) >> filter_(f.z==1)\n\"\"\"# output:\n        x        y       z\n  <int64> <object> <int64>\n0       2      two       1\n1       3    three       1\n\"\"\"\n```\n\n```python\n# works with plotnine\n# example grabbed from https://github.com/has2k1/plydata\nimport numpy\nfrom datar import f\nfrom datar.base import sin, pi\nfrom datar.tibble import tibble\nfrom datar.dplyr import mutate, if_else\nfrom plotnine import ggplot, aes, geom_line, theme_classic\n\ndf = tibble(x=numpy.linspace(0, 2 * pi, 500))\n(\n    df\n    >> mutate(y=sin(f.x), sign=if_else(f.y >= 0, \"positive\", \"negative\"))\n    >> ggplot(aes(x=\"x\", y=\"y\"))\n    + theme_classic()\n    + geom_line(aes(color=\"sign\"), size=1.2)\n)\n```\n\n![example](./example.png)\n\n```python\n# very easy to integrate with other libraries\n# for example: klib\nimport klib\nfrom pipda import register_verb\nfrom datar import f\nfrom datar.data import iris\nfrom datar.dplyr import pull\n\ndist_plot = register_verb(func=klib.dist_plot)\niris >> pull(f.Sepal_Length) >> dist_plot()\n```\n\n![example](./example2.png)\n\n## Testimonials\n\n[@coforfe](https://github.com/coforfe):\n> Thanks for your excellent package to port R (`dplyr`) flow of processing to Python. I have been using other alternatives, and yours is the one that offers the most extensive and equivalent to what is possible now with `dplyr`.\n\n[1]: https://github.com/pwwang/datar-numpy\n[2]: https://github.com/pwwang/datar-pandas\n[3]: https://img.shields.io/codacy/coverage/0a7519dad44246b6bab30576895f6766?style=flat-square\n[4]: https://img.shields.io/codacy/coverage/45f4ea84ae024f1a8cf84be54dd144f7?style=flat-square\n[5]: https://pwwang.github.io/datar/\n[6]: https://img.shields.io/pypi/v/datar?style=flat-square\n[7]: https://pypi.org/project/datar/\n[8]: https://img.shields.io/github/v/tag/pwwang/datar?style=flat-square\n[9]: https://github.com/pwwang/datar\n[10]: https://img.shields.io/github/actions/workflow/status/pwwang/datar/ci.yml?branch=master&style=flat-square\n[11]: https://img.shields.io/github/actions/workflow/status/pwwang/datar/docs.yml?branch=master&style=flat-square\n[12]: https://img.shields.io/codacy/grade/3d9bdff4d7a34bdfb9cd9e254184cb35?style=flat-square\n[13]: https://app.codacy.com/gh/pwwang/datar\n[14]: https://img.shields.io/codacy/coverage/3d9bdff4d7a34bdfb9cd9e254184cb35?style=flat-square\n[15]: https://pwwang.github.io/datar/reference-maps/ALL/\n[16]: https://pwwang.github.io/datar/notebooks/across/\n[17]: https://pwwang.github.io/datar/api/datar/\n[18]: https://img.shields.io/pypi/v/datar-numpy?style=flat-square\n[19]: https://img.shields.io/pypi/v/datar-pandas?style=flat-square\n[20]: https://img.shields.io/pypi/dm/datar?style=flat-square\n[21]: https://github.com/tidyverse/dplyr\n[22]: https://github.com/pwwang/datar-arrow\n[23]: https://img.shields.io/codacy/coverage/5f4ef9dd2503437db18786ff9e841d8b?style=flat-square\n[24]: https://img.shields.io/pypi/v/datar-arrow?style=flat-square\n"
  },
  {
    "path": "datar/__init__.py",
    "content": "from typing import Mapping as _Mapping\n\nfrom .core import operator as _\nfrom .core.defaults import f\nfrom .core.options import options, get_option, options_context\n\n__version__ = \"0.15.17\"\n\n__all__ = [\n    \"f\",\n    \"options\",\n    \"get_option\",\n    \"options_context\",\n    \"get_versions\",\n]\n\n\ndef get_versions(prnt: bool = True) -> _Mapping[str, str]:\n    \"\"\"Return/Print the versions of the dependencies.\n\n    Args:\n        prnt: If True, print the versions, otherwise return them.\n\n    Returns:\n        A dict of the versions of the dependencies if `prnt` is False.\n    \"\"\"\n    import sys\n    import executing\n    import pipda\n    import simplug\n    from .core.load_plugins import plugin\n\n    versions = {\n        \"python\": sys.version,\n        \"datar\": __version__,\n        \"simplug\": simplug.__version__,\n        \"executing\": executing.__version__,\n        \"pipda\": pipda.__version__,\n    }\n\n    versions_plg = plugin.hooks.get_versions()\n    versions.update(versions_plg)\n\n    if not prnt:\n        return versions\n\n    keylen = max(map(len, versions))\n    for key in versions:\n        ver = versions[key]\n        verlines = ver.splitlines()\n        print(f\"{key.ljust(keylen)}: {verlines.pop(0)}\")\n        for verline in verlines:  # pragma: no cover\n            print(f\"{' ' * keylen}  {verline}\")\n\n    return None\n"
  },
  {
    "path": "datar/all.py",
    "content": "\"\"\"Import all constants, verbs and functions\"\"\"\n\nfrom .core import load_plugins as _\nfrom .core.defaults import f\n\nfrom .base import _conflict_names as _base_conflict_names\nfrom .dplyr import _conflict_names as _dplyr_conflict_names\n\nfrom .base import *\nfrom .dplyr import *\nfrom .forcats import *\nfrom .tibble import *\nfrom .tidyr import *\nfrom .misc import *\n\n__all__ = [key for key in locals() if not key.startswith(\"_\")]\n\nif get_option(\"allow_conflict_names\"):  # noqa: F405\n    __all__.extend(_base_conflict_names | _dplyr_conflict_names)\n    for name in _base_conflict_names | _dplyr_conflict_names:\n        locals()[name] = locals()[name + \"_\"]\n\n\ndef __getattr__(name):\n    \"\"\"Even when allow_conflict_names is False, datar.base.sum should be fine\n    \"\"\"\n    if name in _base_conflict_names | _dplyr_conflict_names:\n        import sys\n        import ast\n        from executing import Source\n        node = Source.executing(sys._getframe(1)).node\n        if isinstance(node, (ast.Call, ast.Attribute)):\n            # import datar.all as d\n            # d.sum(...) or getattr(d, \"sum\")(...)\n            return globals()[name + \"_\"]\n\n    raise AttributeError\n"
  },
  {
    "path": "datar/apis/__init__.py",
    "content": ""
  },
  {
    "path": "datar/apis/base.py",
    "content": "\"\"\"APIs ported from r-base\"\"\"\n# import the variables with _ so that they are not imported by *\nimport math as _math\nfrom typing import Any\nfrom string import ascii_letters as _ascii_letters\n\nfrom pipda import register_func as _register_func\n\nfrom ..core.utils import (\n    NotImplementedByCurrentBackendError as _NotImplementedByCurrentBackendError,\n    CollectionFunction as _CollectionFunction,\n)\nfrom ..core.options import options, get_option, options_context  # noqa: F401\nfrom ..core.names import repair_names as _repair_names\n\npi = _math.pi\nletters = list(_ascii_letters[:26])\nLETTERS = list(_ascii_letters[26:])\nmonth_name = [\n    \"January\",\n    \"February\",\n    \"March\",\n    \"April\",\n    \"May\",\n    \"June\",\n    \"July\",\n    \"August\",\n    \"September\",\n    \"October\",\n    \"November\",\n    \"December\",\n]\nmonth_abb = [m[:3] for m in month_name]\n\nFALSE = False\nTRUE = True\nNA = float(\"nan\")\nNULL = None\nNaN = float(\"nan\")\nInf = float(\"inf\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef ceiling(x) -> Any:\n    \"\"\"Round up to the nearest integer\n\n    Args:\n        x: The value to be rounded up\n\n    Returns:\n        The rounded up value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"ceiling\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cov(x, y=None, na_rm: bool = False, ddof: int = 1) -> Any:\n    \"\"\"Compute pairwise covariance between two variables\n\n    Args:\n        x: a numeric vector, matrix or data frame.\n        y: None or a vector, matrix or data frame with\n          compatible dimensions to `x`.  The default is equivalent to\n          `y = x`\n        na_rm: If `True`, remove missing values before computing\n            the covariance.\n        ddof: The denominator degrees of freedom.\n\n    Returns:\n        The covariance matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cov\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef floor(x) -> Any:\n    \"\"\"Round down to the nearest integer\n\n    Args:\n        x: The value to be rounded down\n\n    Returns:\n        The rounded down value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"floor\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef mean(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the mean of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The mean of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"mean\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef median(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the median of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The median of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"median\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef pmax(*args, na_rm: bool = False) -> Any:\n    \"\"\"Returns the (regular or Parallel) maxima and minima of the input\n     values.\n\n    Args:\n        x: A numeric vector\n        more: One or more values\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The maximum of the vector and the values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pmax\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef pmin(*args, na_rm: bool = False) -> Any:\n    \"\"\"Returns the (regular or Parallel) maxima and minima of the input\n     values.\n\n    Args:\n        x: A numeric vector\n        more: One or more values\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The minimum of the vector and the values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pmin\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sqrt(x) -> Any:\n    \"\"\"Compute the square root of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The square root of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sqrt\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef var(x, na_rm: bool = False, ddof: int = 1) -> Any:\n    \"\"\"Compute the variance of a vector\n\n    Args:\n        x: A numeric vector\n        y: None or a vector, matrix or data frame with\n          compatible dimensions to `x`.  The default is equivalent to\n          `y = x`\n        na_rm: Whether to remove `NA` values\n        ddof: The degrees of freedom\n\n    Returns:\n        The variance of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"var\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef scale(x, center=True, scale_=True) -> Any:\n    \"\"\"Center and/or scale the data\n\n    Args:\n        x: A numeric vector\n        center: Whether to center the data\n        scale_: Whether to scale the data\n\n    Returns:\n        The scaled data\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"scale\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef col_sums(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the column sums of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The column sums of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"col_sums\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef col_means(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the column means of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The column means of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"col_means\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef col_sds(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the column standard deviations of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The column standard deviations of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"col_sds\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef col_medians(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the column medians of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The column medians of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"col_medians\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef row_sums(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the row sums of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The row sums of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"row_sums\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef row_means(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the row means of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The row means of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"row_means\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef row_sds(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the row standard deviations of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The row standard deviations of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"row_sds\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef row_medians(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the row medians of a matrix\n\n    Args:\n        x: A numeric matrix\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The row medians of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"row_medians\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef min_(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the minimum of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The minimum of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"min\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef max_(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the maximum of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The maximum of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"max\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef round_(x, digits: int = 0) -> Any:\n    \"\"\"Round the values of a vector\n\n    Args:\n        x: A numeric vector\n        digits: The number of digits to round to\n\n    Returns:\n        The rounded values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"round\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sum_(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the sum of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The sum of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sum\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef abs_(x) -> Any:\n    \"\"\"Compute the absolute value of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The absolute values of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"abs\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef prod(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the product of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The product of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"prod\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sign(x) -> Any:\n    \"\"\"Compute the sign of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The signs of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sign\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef signif(x, digits: int = 6) -> Any:\n    \"\"\"Round the values of a vector to a given number of significant digits\n\n    Args:\n        x: A numeric vector\n        digits: The number of significant digits to round to\n\n    Returns:\n        The rounded values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"signif\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef trunc(x) -> Any:\n    \"\"\"Truncate the values of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The truncated values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"trunc\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef exp(x) -> Any:\n    \"\"\"Compute the exponential of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The exponential values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"exp\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef log(x, base: float = _math.e) -> Any:\n    \"\"\"Compute the logarithm of a vector\n\n    Args:\n        x: A numeric vector\n        base: The base of the logarithm\n\n    Returns:\n        The logarithm values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"log\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef log2(x) -> Any:\n    \"\"\"Compute the base-2 logarithm of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The logarithm values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"log2\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef log10(x) -> Any:\n    \"\"\"Compute the base 10 logarithm of a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The logarithm values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"log10\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef log1p(x) -> Any:\n    \"\"\"Compute the logarithm of one plus a vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The logarithm values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"log1p\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sd(x, na_rm: bool = False) -> Any:\n    \"\"\"Compute the standard deviation of a vector\n\n    Args:\n        x: A numeric vector\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The standard deviation of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sd\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef weighted_mean(x, w=None, na_rm: bool = False) -> Any:\n    \"\"\"Compute the weighted mean of a vector\n\n    Args:\n        x: A numeric vector\n        w: The weights to use\n        na_rm: Whether to remove `NA` values\n\n    Returns:\n        The weighted mean of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"weighted_mean\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef quantile(\n    x,\n    probs=(0.0, 0.25, 0.5, 0.75, 1.0),\n    na_rm: bool = False,\n    names: bool = True,\n    type_: int = 7,\n    digits: int = 7,\n) -> Any:\n    \"\"\"Compute the quantiles of a vector\n\n    Args:\n        x: A numeric vector\n        probs: The probabilities to use\n\n    Returns:\n        The quantiles of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"quantile\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bessel_i(x, nu, expon_scaled: bool = False) -> Any:\n    \"\"\"Compute the modified Bessel function of the first kind\n\n    Args:\n        x: A numeric vector\n        nu: The order of the Bessel function\n        expon_scaled: Whether to use the scaled version\n\n    Returns:\n        The Bessel function values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bessel_i\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bessel_j(x, nu) -> Any:\n    \"\"\"Compute the Bessel function of the first kind\n\n    Args:\n        x: A numeric vector\n        nu: The order of the Bessel function\n\n    Returns:\n        The Bessel function values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bessel_j\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bessel_k(x, nu, expon_scaled: bool = False) -> Any:\n    \"\"\"Compute the modified Bessel function of the second kind\n\n    Args:\n        x: A numeric vector\n        nu: The order of the Bessel function\n        expon_scaled: Whether to use the scaled version\n\n    Returns:\n        The Bessel function values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bessel_k\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bessel_y(x, nu) -> Any:\n    \"\"\"Compute the Bessel function of the second kind\n\n    Args:\n        x: A numeric vector\n        nu: The order of the Bessel function\n\n    Returns:\n        The Bessel function values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bessel_y\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_double(x) -> Any:\n    \"\"\"Convert a vector to a double vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The double vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_double\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_integer(x) -> Any:\n    \"\"\"Convert a vector to an integer vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The integer vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_integer\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_logical(x) -> Any:\n    \"\"\"Convert a vector to a logical vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The logical vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_logical\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_character(x) -> Any:\n    \"\"\"Convert a vector to a character vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The character vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_character\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_factor(x) -> Any:\n    \"\"\"Convert a vector to a factor vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_factor\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_ordered(x) -> Any:\n    \"\"\"Convert a vector to an ordered vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The ordered vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_ordered\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_date(\n    x,\n    *,\n    format=None,\n    try_formats=None,\n    optional=False,\n    tz=0,\n    origin=None,\n) -> Any:\n    \"\"\"Convert an object to a datetime.date object\n\n    See: https://rdrr.io/r/base/as.Date.html\n\n    Args:\n        x: Object that can be converted into a datetime.date object\n        format:  If not specified, it will try try_formats one by one on\n            the first non-np.nan element, and give an error if none works.\n            Otherwise, the processing is via strptime\n        try_formats: vector of format strings to try if format is not specified.\n            Default formats to try:\n            \"%Y-%m-%d\"\n            \"%Y/%m/%d\"\n            \"%Y-%m-%d %H:%M:%S\"\n            \"%Y/%m/%d %H:%M:%S\"\n        optional: indicating to return np.nan (instead of signalling an error)\n            if the format guessing does not succeed.\n        origin: a datetime.date/datetime object, or something which can be\n            coerced by as_date(origin, ...) to such an object.\n        tz: a time zone offset or a datetime.timedelta object.\n            Note that time zone name is not supported yet.\n\n    Returns:\n        The datetime.date object\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_date\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_numeric(x) -> Any:\n    \"\"\"Convert a vector to a numeric vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The numeric vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_numeric\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef arg(x) -> Any:\n    \"\"\"Angles of complex numbers\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The angles\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"arg\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef conj(x) -> Any:\n    \"\"\"Complex conjugate\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The complex conjugates\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"conj\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef mod(x) -> Any:\n    \"\"\"Modulus of complex numbers\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The modulus\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"mod\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef re_(x) -> Any:\n    \"\"\"Real part of complex numbers\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The real parts\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"re\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef im(x) -> Any:\n    \"\"\"Imaginary part of complex numbers\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The imaginary parts\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"im\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_complex(x) -> Any:\n    \"\"\"Convert a vector to a complex vector\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The complex vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_complex\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_complex(x) -> Any:\n    \"\"\"Check if a vector is complex\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        Whether the vector is complex\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_complex\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cummax(x) -> Any:\n    \"\"\"Cumulative maxima\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The cumulative maxima\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cummax\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cummin(x) -> Any:\n    \"\"\"Cumulative minima\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The cumulative minima\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cummin\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cumprod(x) -> Any:\n    \"\"\"Cumulative products\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The cumulative products\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cumprod\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cumsum(x) -> Any:\n    \"\"\"Cumulative sums\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The cumulative sums\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cumsum\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef droplevels(x) -> Any:\n    \"\"\"Drop unused levels of a factor\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"droplevels\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef levels(x) -> Any:\n    \"\"\"Get the levels of a factor\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"levels\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef set_levels(x, levels) -> Any:\n    \"\"\"Set the levels of a factor\n\n    Args:\n        x: A numeric vector\n        levels: The new levels\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"set_levels\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_factor(x) -> Any:\n    \"\"\"Check if a vector is a factor\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        Whether the vector is a factor\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_factor\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_ordered(x) -> Any:\n    \"\"\"Check if a vector is ordered\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        Whether the vector is ordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_ordered\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef nlevels(x) -> Any:\n    \"\"\"Get the number of levels of a factor\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The number of levels\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nlevels\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef factor(\n    x=None,\n    *,\n    levels=None,\n    labels=None,\n    exclude=None,\n    ordered=False,\n    nmax=None,\n) -> Any:\n    \"\"\"Create a factor vector\n\n    Args:\n        x: A numeric vector\n        levels: The levels\n        labels: The labels\n        exclude: The excluded levels\n        ordered: Whether the factor is ordered\n        nmax: The maximum number of levels\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"factor\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef ordered(x, levels=None, labels=None, exclude=None, nmax=None) -> Any:\n    \"\"\"Create an ordered factor vector\n\n    Args:\n        x: A numeric vector\n        levels: The levels\n        labels: The labels\n        exclude: The excluded levels\n        nmax: The maximum number of levels\n\n    Returns:\n        The ordered factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"ordered\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cut(\n    x,\n    breaks,\n    labels=None,\n    include_lowest=False,\n    right=True,\n    dig_lab=3,\n    ordered_result=False,\n) -> Any:\n    \"\"\"Cut a numeric vector into bins\n\n    Args:\n        x: A numeric vector\n        breaks: The breaks\n        labels: The labels\n        include_lowest: Whether to include the lowest value\n        right: Whether to include the rightmost value\n        dig_lab: The number of digits for labels\n        ordered_result: Whether to return an ordered factor\n\n    Returns:\n        The factor vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cut\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef diff(x, lag: int = 1, differences: int = 1) -> Any:\n    \"\"\"Difference of a numeric vector\n\n    Args:\n        x: A numeric vector\n        lag: The lag to use. Could be negative.\n            It always calculates `x[lag:] - x[:-lag]` even when `lag` is\n            negative\n        differences: The order of the difference\n\n    Returns:\n        An array of `x[lag:] – x[:-lag]`.\n        If `differences > 1`, the rule applies `differences` times on `x`\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"diff\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef expand_grid(x, *args, **kwargs) -> Any:\n    \"\"\"Expand a grid\n\n    Args:\n        x: A numeric vector\n        *args: Additional numeric vectors\n        **kwargs: Additional keyword arguments\n\n    Returns:\n        The expanded grid\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"expand_grid\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef outer(x, y, fun=\"*\") -> Any:\n    \"\"\"Outer product of two vectors\n\n    Args:\n        x: A numeric vector\n        y: A numeric vector\n        fun: The function to handle how the result of the elements from\n            the first and second vectors should be computed.\n            The function has to be vectorized at the second argument, and\n            return the same shape as y.\n\n    Returns:\n        The outer product\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"outer\", x)\n\n\n@_register_func(cls=object, pipeable=True, dispatchable=True)\ndef make_names(names, unique: bool = True) -> Any:\n    \"\"\"Make names for a vector\n\n    Args:\n        names: character vector to be coerced to syntactically valid names.\n            This is coerced to character if necessary.\n        unique: Whether to make the names unique\n\n    Returns:\n        The names\n    \"\"\"\n    try:\n        from slugify import slugify\n    except ImportError as imerr:  # pragma: no cover\n        raise ValueError(\n            \"`make_names()` requires `python-slugify` package.\\n\"\n            \"Try: pip install -U slugify\"\n        ) from imerr\n\n    if isinstance(names, str):\n        names = [names]\n    try:\n        iter(names)\n    except TypeError:\n        names = [names]\n\n    names = [\n        slugify(str(name), separator=\"_\", lowercase=False)\n        for name in names\n    ]\n    names = [f\"_{name}\" if name[0].isdigit() else name for name in names]\n    if unique:\n        return _repair_names(names, \"unique\")\n    return names\n\n\n@_register_func(cls=object, pipeable=True, dispatchable=True)\ndef make_unique(names) -> Any:\n    \"\"\"Make a vector unique\n\n    Args:\n        names: a character vector\n\n    Returns:\n        The unique vector\n    \"\"\"\n    return make_names(names, unique=True, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rank(x, na_last: bool = True, ties_method: str = \"average\") -> Any:\n    \"\"\"Rank a numeric vector\n\n    Args:\n        x: A numeric vector\n        na_last: Whether to put NA at the end\n        ties_method: The method to handle ties. One of \"average\", \"first\",\n            \"last\", \"random\", \"max\", \"min\"\n\n    Returns:\n        The ranks\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rank\", x)\n\n\n@_register_func(cls=object, pipeable=True, dispatchable=True)\ndef identity(x) -> Any:\n    \"\"\"Identity function\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        The same vector\n    \"\"\"\n    return x\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_logical(x) -> Any:\n    \"\"\"Check if a vector is logical\n\n    Args:\n        x: A numeric vector\n\n    Returns:\n        Whether the vector is logical\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_logical\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_true(x) -> bool:\n    \"\"\"Check if anything is true\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is true\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_true\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_false(x) -> bool:\n    \"\"\"Check if anything is false\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is false\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_false\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_na(x) -> Any:\n    \"\"\"Check if anything is NA\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is NA\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_na\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_finite(x) -> Any:\n    \"\"\"Check if anything is finite\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is finite\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_finite\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_infinite(x) -> Any:\n    \"\"\"Check if anything is infinite\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is infinite\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_infinite\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef any_na(x) -> Any:\n    \"\"\"Check if anything in `x` is NA\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether anything in `x` is NA\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"any_na\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef as_null(x) -> Any:\n    \"\"\"Convert anything to NULL\n\n    Args:\n        x: object to be converted\n\n    Returns:\n        NULL\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_null\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_null(x) -> Any:\n    \"\"\"Check if anything is NULL\n\n    Args:\n        x: object to be tested\n\n    Returns:\n        Whether `x` is NULL\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_null\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef set_seed(seed) -> Any:\n    \"\"\"Set the seed of the random number generator\n\n    Args:\n        seed: The seed\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"set_seed\", seed)\n\n\n@_register_func(pipeable=True, dispatchable=\"all\")\ndef rep(x, times=1, length=None, each=1) -> Any:\n    \"\"\"Replicate elements of a vector\n\n    Args:\n        x: a vector or scaler\n        times: number of times to repeat each element if of length len(x),\n            or to repeat the whole vector if of length 1\n        length: non-negative integer. The desired length of the output vector\n        each: non-negative integer. Each element of x is repeated each times.\n\n    Returns:\n        The replicated vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rep\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef c_(*args) -> Any:\n    \"\"\"Concatenate vectors\n\n    Args:\n        args: vectors to be concatenated\n\n    Returns:\n        The concatenated vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"c\", *args)\n\n\nc = _CollectionFunction(c_)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef length(x) -> Any:\n    \"\"\"Get the length of a vector\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The length of the vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"length\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lengths(x) -> Any:\n    \"\"\"Get the lengths of a list\n\n    Args:\n        x: a list\n\n    Returns:\n        The lengths of the list\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lengths\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef order(x, decreasing: bool = False, na_last: bool = True) -> Any:\n    \"\"\"Order a vector\n\n    Args:\n        x: a vector or scaler\n        decreasing: Whether to order in decreasing order\n        na_last: Whether to put NA at the end\n\n    Returns:\n        The order\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"order\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sort(x, decreasing: bool = False, na_last: bool = True) -> Any:\n    \"\"\"Sort a vector\n\n    Args:\n        x: a vector or scaler\n        decreasing: Whether to sort in decreasing order\n        na_last: Whether to put NA at the end\n\n    Returns:\n        The sorted vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sort\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rev(x) -> Any:\n    \"\"\"Reverse a vector\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The reversed vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rev\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sample(x, size=None, replace: bool = False, prob=None) -> Any:\n    \"\"\"Sample a vector\n\n    Args:\n        x: a vector or scaler\n        size: the size of the sample\n        replace: whether to sample with replacement\n        prob: the probabilities of sampling each element\n\n    Returns:\n        The sampled vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sample\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef seq(from_=None, to=None, by=None, length_out=None, along_with=None) -> Any:\n    \"\"\"Generate a sequence\n\n    Args:\n        from_: the start of the sequence\n        to: the end of the sequence\n        by: the step of the sequence\n        length_out: the length of the sequence\n        along_with: the sequence to be aligned with\n\n    Returns:\n        The sequence\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"seq\", from_)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef seq_along(x) -> Any:\n    \"\"\"Generate a sequence along a vector\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The sequence\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"seq_along\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef seq_len(x) -> Any:\n    \"\"\"Generate a sequence of length x\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The sequence\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"seq_len\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef match(x, table, nomatch=-1) -> Any:\n    \"\"\"Match elements of a vector\n\n    Args:\n        x: a vector or scaler\n        table: the table to match\n        nomatch: the value to use for no match\n\n    Returns:\n        The matched vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"match\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef beta(x, y) -> Any:\n    \"\"\"Compute the beta function\n\n    Args:\n        x: a vector or scaler\n        y: a vector or scaler\n\n    Returns:\n        The beta function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"beta\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lgamma(x) -> Any:\n    \"\"\"Compute the log gamma function\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The log gamma function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lgamma\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef digamma(x) -> Any:\n    \"\"\"Compute the digamma function\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The digamma function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"digamma\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef trigamma(x) -> Any:\n    \"\"\"Compute the trigamma function\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The trigamma function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"trigamma\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef choose(n, k) -> Any:\n    \"\"\"Compute the binomial coefficient\n\n    Args:\n        n: a vector or scaler\n        k: a vector or scaler\n\n    Returns:\n        The binomial coefficient\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"choose\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef factorial(x) -> Any:\n    \"\"\"Compute the factorial\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The factorial\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"factorial\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef gamma(x) -> Any:\n    \"\"\"Compute the gamma function\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The gamma function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"gamma\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lfactorial(x) -> Any:\n    \"\"\"Compute the log factorial\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        The log factorial\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lfactorial\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lchoose(n, k) -> Any:\n    \"\"\"Compute the log binomial coefficient\n\n    Args:\n        n: a vector or scaler\n        k: a vector or scaler\n\n    Returns:\n        The log binomial coefficient\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lchoose\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lbeta(x, y) -> Any:\n    \"\"\"Compute the log beta function\n\n    Args:\n        x: a vector or scaler\n        y: a vector or scaler\n\n    Returns:\n        The log beta function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lbeta\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef psigamma(x, deriv) -> Any:\n    \"\"\"Compute the psi function\n\n    Args:\n        x: a vector or scaler\n        deriv: the derivative\n\n    Returns:\n        The psi function\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"psigamma\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rnorm(n, mean=0, sd=1) -> Any:\n    \"\"\"Generate random normal variables\n\n    Args:\n        n: the number of random variables\n        mean: the mean of the random variables\n        sd: the standard deviation of the random variables\n\n    Returns:\n        The random normal variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rnorm\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef runif(n, min=0, max=1) -> Any:\n    \"\"\"Generate random uniform variables\n\n    Args:\n        n: the number of random variables\n        min: the minimum of the random variables\n        max: the maximum of the random variables\n\n    Returns:\n        The random uniform variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"runif\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rpois(n, lambda_) -> Any:\n    \"\"\"Generate random Poisson variables\n\n    Args:\n        n: the number of random variables\n        lambda_: the lambda of the random variables\n\n    Returns:\n        The random Poisson variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rpois\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rbinom(n, size, prob) -> Any:\n    \"\"\"Generate random binomial variables\n\n    Args:\n        n: the number of random variables\n        size: the size of the random variables\n        prob: the probability of the random variables\n\n    Returns:\n        The random binomial variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rbinom\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rcauchy(n, location=0, scale=1) -> Any:\n    \"\"\"Generate random Cauchy variables\n\n    Args:\n        n: the number of random variables\n        location: the location of the random variables\n        scale: the scale of the random variables\n\n    Returns:\n        The random Cauchy variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rcauchy\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rchisq(n, df) -> Any:\n    \"\"\"Generate random chi-squared variables\n\n    Args:\n        n: the number of random variables\n        df: the degrees of freedom of the random variables\n\n    Returns:\n        The random chi-squared variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rchisq\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rexp(n, rate) -> Any:\n    \"\"\"Generate random exponential variables\n\n    Args:\n        n: the number of random variables\n        rate: the rate of the random variables\n\n    Returns:\n        The random exponential variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rexp\", n)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_character(x) -> Any:\n    \"\"\"Is x a character vector\n\n    Args:\n        x: a vector or scaler\n\n    Returns:\n        True if x is a character vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_character\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef grep(\n    pattern,\n    x,\n    ignore_case=False,\n    value=False,\n    fixed=False,\n    invert=False,\n) -> Any:\n    \"\"\"Grep for a pattern\n\n    Args:\n        pattern: the pattern to search for\n        x: the vector to search\n        ignore_case: ignore case\n        value: return the value\n        fixed: use fixed string matching\n        invert: invert the match\n\n    Returns:\n        The indices of the matches\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"grep\", pattern)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef grepl(pattern, x, ignore_case=False, fixed=False) -> Any:\n    \"\"\"Grep for a pattern\n\n    Args:\n        pattern: the pattern to search for\n        x: the vector to search\n        ignore_case: ignore case\n        fixed: use fixed string matching\n\n    Returns:\n        The indices of the matches\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"grepl\", pattern)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sub(pattern, replacement, x, ignore_case=False, fixed=False) -> Any:\n    \"\"\"Substitute a pattern\n\n    Args:\n        pattern: the pattern to search for\n        replacement: the replacement\n        x: the vector to search\n        ignore_case: ignore case\n        fixed: use fixed string matching\n\n    Returns:\n        The vector with the substitutions\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sub\", pattern)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef gsub(pattern, replacement, x, ignore_case=False, fixed=False) -> Any:\n    \"\"\"Substitute a pattern\n\n    Args:\n        pattern: the pattern to search for\n        replacement: the replacement\n        x: the vector to search\n        ignore_case: ignore case\n        fixed: use fixed string matching\n\n    Returns:\n        The vector with the substitutions\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"gsub\", pattern)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef strsplit(x, split, fixed=False, perl=False, use_bytes=False) -> Any:\n    \"\"\"Split a string\n\n    Args:\n        x: the vector to split\n        split: the pattern to split on\n        fixed: use fixed string matching\n        perl: use perl regular expressions\n        use_bytes: use bytes\n\n    Returns:\n        The vector with the splits\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"strsplit\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef paste(*args, sep=\" \", collapse=None) -> Any:\n    \"\"\"Join a vector into a string\n\n    Args:\n        *args: the vector to join\n        sep: the separator\n        collapse: collapse the vector\n\n    Returns:\n        The vector joined into a string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"paste\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef paste0(*args, collapse=None) -> Any:\n    \"\"\"Join a vector into a string\n\n    Args:\n        *args: the vector to join\n        collapse: collapse the vector\n\n    Returns:\n        The vector joined into a string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"paste0\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sprintf(fmt, *args) -> Any:\n    \"\"\"Format a string\n\n    Args:\n        fmt: the format string\n        args: the arguments to the format string\n\n    Returns:\n        The formatted string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sprintf\", fmt)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef substr(x, start, stop) -> Any:\n    \"\"\"Get a substring\n\n    Args:\n        x: the string to get the substring from\n        start: the start of the substring\n        stop: the stop of the substring\n\n    Returns:\n        The substring\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"substr\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef substring(x, first, last=None) -> Any:\n    \"\"\"Get a substring\n\n    Args:\n        x: the string to get the substring from\n        first: the start of the substring\n        last: the stop of the substring\n\n    Returns:\n        The substring\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"substring\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef startswith(x, prefix) -> Any:\n    \"\"\"Does x start with prefix\n\n    Args:\n        x: the string to check\n        prefix: the prefix to check\n\n    Returns:\n        True if x starts with prefix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"startswith\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef endswith(x, suffix) -> Any:\n    \"\"\"Does x end with suffix\n\n    Args:\n        x: the string to check\n        suffix: the suffix to check\n\n    Returns:\n        True if x ends with suffix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"endswith\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef strtoi(x, base=0) -> Any:\n    \"\"\"Convert a string to an integer\n\n    Args:\n        x: the string to convert\n        base: the base of the integer\n\n    Returns:\n        The integer\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"strtoi\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef trimws(x, which=\"both\", whitespace=r\" \\t\") -> Any:\n    \"\"\"Trim whitespace from a string\n\n    Args:\n        x: the string to trim\n        which: which whitespace to trim\n        whitespace: the whitespace to trim\n\n    Returns:\n        The trimmed string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"trimws\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef toupper(x) -> Any:\n    \"\"\"Convert a string to upper case\n\n    Args:\n        x: the string to convert\n\n    Returns:\n        The upper case string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"toupper\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tolower(x) -> Any:\n    \"\"\"Convert a string to lower case\n\n    Args:\n        x: the string to convert\n\n    Returns:\n        The lower case string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tolower\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef chartr(old, new, x) -> Any:\n    \"\"\"Translate characters\n\n    Args:\n        old: the characters to translate\n        new: the new characters\n        x: the string to translate\n\n    Returns:\n        The translated string\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"chartr\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef nchar(\n    x,\n    type_=\"width\",\n    allow_na: bool = True,\n    keep_na: bool = False,\n    _na_len: int = 2,\n) -> Any:\n    \"\"\"Get the number of characters in a string\n\n    Args:\n        x: the string to count\n        type: the type of count\n        allow_na: allow NA\n        keep_na: keep NA\n\n    Returns:\n        The number of characters\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nchar\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef nzchar(x, keep_na: bool = False) -> Any:\n    \"\"\"Is the string non-zero length\n\n    Args:\n        x: the string to check\n        keep_na: keep NA\n\n    Returns:\n        True if the string is non-zero length\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nzchar\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef table(\n    x,\n    *more,\n    exclude=None,\n    use_na=\"no\",\n    dnn=None,\n    deparse_level=1,\n) -> Any:\n    \"\"\"Get the table of a vector\n\n    Args:\n        x: the vector to get the table of\n        more: more vectors\n        exclude: exclude these values\n        use_na: use NA\n        dnn: the names of the vectors\n        deparse_level: the deparse level\n\n    Returns:\n        The table\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"table\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tabulate(bin, nbins=None) -> Any:\n    \"\"\"Get the table of a vector\n\n    Args:\n        bin: the vector to get the table of\n        nbins: the number of bins\n\n    Returns:\n        An integer valued 'integer' vector (without names).\n        There is a bin for each of the values '1, ..., nbins'\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tabulate\", bin)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_atomic(x) -> Any:\n    \"\"\"Is the object atomic\n\n    Args:\n        x: the object to check\n\n    Returns:\n        True if the object is atomic\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_atomic\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_double(x) -> Any:\n    \"\"\"Is the object a double\n\n    Args:\n        x: the object to check\n\n    Returns:\n        True if the object is a double\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_double\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_element(x, y) -> Any:\n    \"\"\"Is the object an element of the table\n\n    Args:\n        x: the object to check\n        y: the pool to check\n\n    Returns:\n        True if the object is an element of the pool\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_element\", x)\n\n\nis_in = is_element\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_integer(x) -> Any:\n    \"\"\"Is the object an integer\n\n    Args:\n        x: the object to check\n\n    Returns:\n        True if the object is an integer\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_integer\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef is_numeric(x) -> Any:\n    \"\"\"Is the object numeric\n\n    Args:\n        x: the object to check\n\n    Returns:\n        True if the object is numeric\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"is_numeric\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef any_(x, na_rm: bool = False) -> Any:\n    \"\"\"Is any element true\n\n    Args:\n        x: the vector to check\n        na_rm: remove NA\n\n    Returns:\n        True if any element is true\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"any\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef all_(x, na_rm: bool = False) -> Any:\n    \"\"\"Are all elements true\n\n    Args:\n        x: the vector to check\n        na_rm: remove NA\n\n    Returns:\n        True if all elements are true\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"all\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef acos(x) -> Any:\n    \"\"\"Get the inverse cosine\n\n    Args:\n        x: the value to get the inverse cosine of\n\n    Returns:\n        The inverse cosine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"acos\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef acosh(x) -> Any:\n    \"\"\"Get the inverse hyperbolic cosine\n\n    Args:\n        x: the value to get the inverse hyperbolic cosine of\n\n    Returns:\n        The inverse hyperbolic cosine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"acosh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef asin(x) -> Any:\n    \"\"\"Get the inverse sine\n\n    Args:\n        x: the value to get the inverse sine of\n\n    Returns:\n        The inverse sine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"asin\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef asinh(x) -> Any:\n    \"\"\"Get the inverse hyperbolic sine\n\n    Args:\n        x: the value to get the inverse hyperbolic sine of\n\n    Returns:\n        The inverse hyperbolic sine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"asinh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef atan(x) -> Any:\n    \"\"\"Get the inverse tangent\n\n    Args:\n        x: the value to get the inverse tangent of\n\n    Returns:\n        The inverse tangent\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"atan\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef atanh(x) -> Any:\n    \"\"\"Get the inverse hyperbolic tangent\n\n    Args:\n        x: the value to get the inverse hyperbolic tangent of\n\n    Returns:\n        The inverse hyperbolic tangent\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"atanh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cos(x) -> Any:\n    \"\"\"Get the cosine\n\n    Args:\n        x: the value to get the cosine of\n\n    Returns:\n        The cosine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cos\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cosh(x) -> Any:\n    \"\"\"Get the hyperbolic cosine\n\n    Args:\n        x: the value to get the hyperbolic cosine of\n\n    Returns:\n        The hyperbolic cosine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cosh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cospi(x) -> Any:\n    \"\"\"Get the cosine of pi times x\n\n    Args:\n        x: the value to get the cosine of pi times x of\n\n    Returns:\n        The cosine of pi times x\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cospi\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sin(x) -> Any:\n    \"\"\"Get the sine\n\n    Args:\n        x: the value to get the sine of\n\n    Returns:\n        The sine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sin\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sinh(x) -> Any:\n    \"\"\"Get the hyperbolic sine\n\n    Args:\n        x: the value to get the hyperbolic sine of\n\n    Returns:\n        The hyperbolic sine\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sinh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef sinpi(x) -> Any:\n    \"\"\"Get the sine of pi times x\n\n    Args:\n        x: the value to get the sine of pi times x of\n\n    Returns:\n        The sine of pi times x\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"sinpi\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tan(x) -> Any:\n    \"\"\"Get the tangent\n\n    Args:\n        x: the value to get the tangent of\n\n    Returns:\n        The tangent\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tan\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tanh(x) -> Any:\n    \"\"\"Get the hyperbolic tangent\n\n    Args:\n        x: the value to get the hyperbolic tangent of\n\n    Returns:\n        The hyperbolic tangent\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tanh\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tanpi(x) -> Any:\n    \"\"\"Get the tangent of pi times x\n\n    Args:\n        x: the value to get the tangent of pi times x of\n\n    Returns:\n        The tangent of pi times x\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tanpi\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef atan2(y, x) -> Any:\n    \"\"\"Get the inverse tangent of y/x\n\n    Args:\n        y: the numerator\n        x: the denominator\n\n    Returns:\n        The inverse tangent of y/x\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"atan2\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef append(x, values, after: int = -1) -> Any:\n    \"\"\"Append values to the vector\n\n    Args:\n        x: the vector to append to\n        values: the values to append\n        after: the index to append after\n\n    Returns:\n        The vector with the values appended\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"append\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef colnames(x, nested: bool = True) -> Any:\n    \"\"\"Get the column names\n\n    Args:\n        x: the data frame to get the column names of\n        nested: whether x is a nested data frame\n\n    Returns:\n        The column names\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"colnames\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef set_colnames(x, names, nested: bool = True) -> Any:\n    \"\"\"Set the column names\n\n    Args:\n        x: the data frame to set the column names of\n        names: the column names to set\n        nested: whether the frame are nested\n\n    Returns:\n        The data frame with the column names set\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"set_colnames\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef rownames(x) -> Any:\n    \"\"\"Get the row names\n\n    Args:\n        x: the data frame to get the row names of\n\n    Returns:\n        The row names\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rownames\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef set_rownames(x, names) -> Any:\n    \"\"\"Set the row names\n\n    Args:\n        x: the data frame to set the row names of\n        names: the row names to set\n\n    Returns:\n        The data frame with the row names set\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"set_rownames\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef dim(x, nested: bool = True) -> Any:\n    \"\"\"Get the dimensions\n\n    Args:\n        x: the data frame to get the dimensions of\n        nested: whether x is a nested data frame\n\n    Returns:\n        The dimensions\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"dim\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef diag(x, nrow=None, ncol=None) -> Any:\n    \"\"\"Get the diagonal of a matrix\n\n    Args:\n        x: the matrix to get the diagonal of\n        nrow: the number of rows\n        ncol: the number of columns\n\n    Returns:\n        The diagonal of the matrix\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"diag\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef duplicated(x, incomparables=None, from_last: bool = False) -> Any:\n    \"\"\"Get the duplicated values\n\n    Args:\n        x: the vector to get the duplicated values of\n        incomparables: the incomparables\n        from_last: whether to search from the last\n\n    Returns:\n        The duplicated values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"duplicated\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef intersect(x, y) -> Any:\n    \"\"\"Get the intersection of two vectors\n\n    Args:\n        x: the first vector\n        y: the second vector\n\n    Returns:\n        The intersection of the two vectors\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"intersect\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef ncol(x, nested: bool = True) -> Any:\n    \"\"\"Get the number of columns\n\n    Args:\n        x: the data frame to get the number of columns of\n        nested: whether x is a nested data frame\n\n    Returns:\n        The number of columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"ncol\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef nrow(x) -> Any:\n    \"\"\"Get the number of rows\n\n    Args:\n        x: the data frame to get the number of rows of\n\n    Returns:\n        The number of rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nrow\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef proportions(x, margin: int = 1) -> Any:\n    \"\"\"Get the proportion table\n\n    Args:\n        x: the data frame to get the proportion table of\n        margin: the margin\n\n    Returns:\n        The proportion table\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"proportions\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef setdiff(x, y) -> Any:\n    \"\"\"Get the difference of two vectors\n\n    Args:\n        x: the first vector\n        y: the second vector\n\n    Returns:\n        The difference of the two vectors\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"setdiff\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef setequal(x, y) -> Any:\n    \"\"\"Check if two vectors are equal\n\n    Args:\n        x: the first vector\n        y: the second vector\n\n    Returns:\n        Whether the two vectors are equal\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"setequal\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef unique(x) -> Any:\n    \"\"\"Get the unique values\n\n    Args:\n        x: the vector to get the unique values of\n\n    Returns:\n        The unique values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"unique\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef t(x) -> Any:\n    \"\"\"Get the transpose\n\n    Args:\n        x: the matrix to get the transpose of\n\n    Returns:\n        The transpose\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"t\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef union(x, y) -> Any:\n    \"\"\"Get the union of two vectors\n\n    Args:\n        x: the first vector\n        y: the second vector\n\n    Returns:\n        The union of the two vectors\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"union\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef max_col(x, ties_method: str = \"random\", nested: bool = True) -> Any:\n    \"\"\"Get the maximum column\n\n    Args:\n        x: the data frame to get the maximum column of\n        ties_method: the ties method\n        nested: whether x is a nested data frame\n\n    Returns:\n        The maximum column\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"max_col\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef complete_cases(x) -> Any:\n    \"\"\"Get the complete cases\n\n    Args:\n        x: the data frame to get the complete cases of\n\n    Returns:\n        The complete cases\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"complete_cases\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef head(x, n: int = 6) -> Any:\n    \"\"\"Get the first n rows\n\n    Args:\n        x: the data frame to get the first n rows of\n        n: the number of rows to get\n\n    Returns:\n        The first n rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"head\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tail(x, n: int = 6) -> Any:\n    \"\"\"Get the last n rows\n\n    Args:\n        x: the data frame to get the last n rows of\n        n: the number of rows to get\n\n    Returns:\n        The last n rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tail\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef which(x) -> Any:\n    \"\"\"Get the indices of the non-zero values\n\n    Args:\n        x: the vector to get the indices of the non-zero values of\n\n    Returns:\n        The indices of the non-zero values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"which\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef which_max(x) -> Any:\n    \"\"\"Get the index of the maximum value\n\n    Args:\n        x: the vector to get the index of the maximum value of\n\n    Returns:\n        The index of the maximum value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"which_max\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef which_min(x) -> Any:\n    \"\"\"Get the index of the minimum value\n\n    Args:\n        x: the vector to get the index of the minimum value of\n\n    Returns:\n        The index of the minimum value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"which_min\", x)\n"
  },
  {
    "path": "datar/apis/dplyr.py",
    "content": "# import the variables with _ so that they are not imported by *\nfrom __future__ import annotations as _\nfrom typing import (\n    Any,\n    Callable as _Callable,\n    Sequence as _Sequence,\n    TypeVar as _TypeVar,\n)\n\nfrom pipda import (\n    register_verb as _register_verb,\n    register_func as _register_func,\n)\nfrom ..core.verb_env import get_verb_ast_fallback as _get_verb_ast_fallback\n\nfrom ..core.defaults import f as _f_symbolic\nfrom ..core.utils import (\n    NotImplementedByCurrentBackendError as _NotImplementedByCurrentBackendError,\n)\nfrom .base import intersect, setdiff, setequal, union  # noqa: F401\n\nT = _TypeVar(\"T\")\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"pick\"))\ndef pick(_data: T, *args) -> T:\n    \"\"\"Pick columns by name\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/pick.html\n\n    Args:\n        _data: The dataframe\n        *args: The columns to pick\n\n    Returns:\n        The picked dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pick\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"across\"))\ndef across(_data: T, *args, _names=None, **kwargs) -> T:\n    \"\"\"Apply the same transformation to multiple columns\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/across.html\n\n    Examples:\n        #\n        >>> iris >> mutate(across(c(f.Sepal_Length, f.Sepal_Width), round))\n            Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\n               <float64>    <float64>     <float64>    <float64>   <object>\n        0            5.0          4.0           1.4          0.2     setosa\n        1            5.0          3.0           1.4          0.2     setosa\n        ..           ...          ...           ...          ...        ...\n\n        >>> iris >> group_by(f.Species) >> summarise(\n        >>>     across(starts_with(\"Sepal\"), mean)\n        >>> )\n              Species  Sepal_Length  Sepal_Width\n             <object>     <float64>    <float64>\n        0      setosa         5.006        3.428\n        1  versicolor         5.936        2.770\n        2   virginica         6.588        2.974\n\n    Args:\n        _data: The dataframe.\n        *args: If given, the first 2 elements should be columns and functions\n            apply to each of the selected columns. The rest of them will be\n            the arguments for the functions.\n        _names: A glue specification that describes how to name\n            the output columns. This can use `{_col}` to stand for the\n            selected column name, and `{_fn}` to stand for the name of\n            the function being applied.\n            The default (None) is equivalent to `{_col}` for the\n            single function case and `{_col}_{_fn}` for the case where\n            a list is used for _fns. In such a case, `{_fn}` is 0-based.\n            To use 1-based index, use `{_fn1}`\n        _fn_context: Defines the context to evaluate the arguments for functions\n            if they are plain functions.\n            Note that registered functions will use its own context\n        **kwargs: Keyword arguments for the functions\n\n    Returns:\n        A dataframe with one column for each column and each function.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"across\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"c_across\"))\ndef c_across(_data: T, _cols=None) -> T:\n    \"\"\"Apply the same transformation to multiple columns rowwisely\n\n    Args:\n        _data: The dataframe\n        _cols: The columns\n\n    Returns:\n        A rowwise tibble\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"c_across\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"if_any\"))\ndef if_any(_data, *args, _names=None, **kwargs) -> Any:\n    \"\"\"Apply the same predicate function to a selection of columns and combine\n    the results True if any element is True.\n\n    See Also:\n        [`across()`](datar.dplyr.across.across)\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"if_any\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"if_all\"))\ndef if_all(_data, *args, _names=None, **kwargs) -> Any:\n    \"\"\"Apply the same predicate function to a selection of columns and combine\n    the results True if all elements are True.\n\n    See Also:\n        [`across()`](datar.dplyr.across.across)\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"if_all\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"symdiff\"))\ndef symdiff(x: T, y: T) -> T:\n    \"\"\"Get the symmetric difference of two dataframes\n\n    It computes the symmetric difference, i.e. all rows in x that aren't in y\n    and all rows in y that aren't in x.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/setops.html\n\n    Args:\n        x: A dataframe\n        y: A dataframe\n\n    Returns:\n        The symmetric difference of x and y\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"symdiff\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"arrange\"))\ndef arrange(_data, *args, _by_group=False, **kwargs) -> Any:\n    \"\"\"orders the rows of a data frame by the values of selected columns.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/arrange.html\n\n    Args:\n        _data: A data frame\n        *series: Variables, or functions of variables.\n            Use desc() to sort a variable in descending order.\n        _by_group: If TRUE, will sort first by grouping variable.\n            Applies to grouped data frames only.\n        **kwargs: Name-value pairs that apply with mutate\n\n    Returns:\n        An object of the same type as _data.\n        The output has the following properties:\n            All rows appear in the output, but (usually) in a different place.\n            Columns are not modified.\n            Groups are not modified.\n            Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"arrange\", _data)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bind_rows(*data, _id=None, _copy: bool = True, **kwargs) -> Any:\n    \"\"\"Bind rows of give dataframes\n\n    Original APIs https://dplyr.tidyverse.org/reference/bind.html\n\n    Args:\n        *data: Dataframes to combine\n        _id: The name of the id columns\n        _copy: If `False`, do not copy data unnecessarily.\n            Original API does not support this. This argument will be\n            passed by to `pandas.concat()` as `copy` argument.\n        **kwargs: A mapping of dataframe, keys will be used as _id col.\n\n    Returns:\n        The combined dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bind_rows\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef bind_cols(*data, _name_repair=\"unique\", _copy: bool = True) -> Any:\n    \"\"\"Bind columns of give dataframes\n\n    Note that unlike `dplyr`, mismatched dimensions are allowed and\n    missing rows will be filled with `NA`s\n\n    Args:\n        *data: Dataframes to bind\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n        _copy: If `False`, do not copy data unnecessarily.\n            Original API does not support this. This argument will be\n            passed by to `pandas.concat()` as `copy` argument.\n\n    Returns:\n        The combined dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"bind_cols\")\n\n\n# context\n@_register_func(plain=True)\ndef cur_column(_data, _name) -> Any:\n    \"\"\"Get the current column\n\n    Args:\n        _data: The dataframe\n        _name: The column name\n\n    Returns:\n        The current column\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_column\")\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"cur_data\"))\ndef cur_data(_data) -> Any:\n    \"\"\"Get the current dataframe\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The current dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_data\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"n\"))\ndef n(_data) -> Any:\n    \"\"\"Get the current group size\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The number of rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"n\", _data)\n\n\n@_register_verb(\n    dependent=True, ast_fallback=_get_verb_ast_fallback(\"cur_data_all\")\n)\ndef cur_data_all(_data) -> Any:\n    \"\"\"Get the current data for the current group including\n    the grouping variables\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The current dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_data_all\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"cur_group\"))\ndef cur_group(_data) -> Any:\n    \"\"\"Get the current group\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The current group\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_group\", _data)\n\n\n@_register_verb(\n    dependent=True, ast_fallback=_get_verb_ast_fallback(\"cur_group_id\")\n)\ndef cur_group_id(_data) -> Any:\n    \"\"\"Get the current group id\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The current group id\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_group_id\", _data)\n\n\n@_register_verb(\n    dependent=True, ast_fallback=_get_verb_ast_fallback(\"cur_group_rows\")\n)\ndef cur_group_rows(_data) -> Any:\n    \"\"\"Get the current group row indices\n\n    Args:\n        _data: The dataframe\n\n    Returns:\n        The current group rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cur_group_rows\", _data)\n\n\n# count_tally\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"count\"))\ndef count(\n    _data,\n    *args,\n    wt=None,\n    sort=False,\n    name=None,\n    _drop=None,\n    **kwargs,\n) -> Any:\n    \"\"\"Count the number of rows in each group\n\n    Original API:\n    https://dplyr.tidyverse.org/reference/count.html\n\n    Args:\n        _data: A data frame\n        *args: Variables, or functions of variables.\n            Use desc() to sort a variable in descending order.\n        wt: A variable or function of variables to weight by.\n        sort: If TRUE, the result will be sorted by the count.\n        name: The name of the count column.\n        _drop: If `False`, keep grouping variables even if they are not used.\n            Original API does not support this.\n        **kwargs: Name-value pairs that apply with mutate\n\n    Returns:\n        A data frame with the same number of rows as the number of groups.\n        The output has the following properties:\n            All rows appear in the output, but (usually) in a different place.\n            Columns are not modified.\n            Groups are not modified.\n            Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"count\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"tally\"))\ndef tally(_data, wt=None, sort=False, name=None) -> Any:\n    \"\"\"Count the number of rows in each group\n\n    Original API:\n    https://dplyr.tidyverse.org/reference/count.html\n\n    Args:\n        _data: A data frame\n        wt: A variable or function of variables to weight by.\n        sort: If TRUE, the result will be sorted by the count.\n        name: The name of the count column.\n\n    Returns:\n        A data frame with the same number of rows as the number of groups.\n        The output has the following properties:\n            All rows appear in the output, but (usually) in a different place.\n            Columns are not modified.\n            Groups are not modified.\n            Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tally\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"add_count\"))\ndef add_count(_data, *args, wt=None, sort=False, name=\"n\", **kwargs) -> Any:\n    \"\"\"Add a count column to a data frame\n\n    Original API:\n    https://dplyr.tidyverse.org/reference/count.html\n\n    Args:\n        _data: A data frame\n        *args: Variables, or functions of variables.\n            Use desc() to sort a variable in descending order.\n        wt: A variable or function of variables to weight by.\n        sort: If TRUE, the result will be sorted by the count.\n        name: The name of the count column.\n        **kwargs: Name-value pairs that apply with mutate\n\n    Returns:\n        A data frame with the same number of rows as the number of groups.\n        The output has the following properties:\n            All rows appear in the output, but (usually) in a different place.\n            Columns are not modified.\n            Groups are not modified.\n            Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"add_count\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"add_tally\"))\ndef add_tally(_data, wt=None, sort=False, name=\"n\") -> Any:\n    \"\"\"Add a count column to a data frame\n\n    Original API:\n    https://dplyr.tidyverse.org/reference/count.html\n\n    Args:\n        _data: A data frame\n        wt: A variable or function of variables to weight by.\n        sort: If TRUE, the result will be sorted by the count.\n        name: The name of the count column.\n\n    Returns:\n        A data frame with the same number of rows as the number of groups.\n        The output has the following properties:\n            All rows appear in the output, but (usually) in a different place.\n            Columns are not modified.\n            Groups are not modified.\n            Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"add_tally\", _data)\n\n\n# desc\n@_register_func(pipeable=True, dispatchable=True)\ndef desc(x) -> Any:\n    \"\"\"Transform a vector into a format that will be sorted in descending order\n\n    This is useful within arrange().\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/desc.html\n\n    Args:\n        x: vector to transform\n\n    Returns:\n        The descending order of x\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"desc\", x)\n\n\n# filter\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"filter_\"))\ndef filter_(_data, *conditions, _preserve: bool = False) -> Any:\n    \"\"\"Filter a data frame based on conditions\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/filter.html\n\n    Args:\n        _data: A data frame\n        *conditions: Conditions to filter by.\n        _preserve: If `True`, keep grouping variables even if they are not used.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"filter\", _data)\n\n\n# distinct\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"distinct\"))\ndef distinct(\n    _data,\n    *args,\n    keep_all: bool = False,\n    _preserve: bool = False,\n) -> Any:\n    \"\"\"Filter a data frame based on conditions\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/distinct.html\n\n    Args:\n        _data: A data frame\n        *args: Variables to filter by.\n        keep_all: If `True`, keep all rows that match.\n        _preserve: If `True`, keep grouping variables even if they are not used.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"distinct\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"n_distinct\"))\ndef n_distinct(_data, na_rm: bool = True) -> Any:\n    \"\"\"Count the number of distinct values\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/distinct.html\n\n    Args:\n        _data: A data frame\n        na_rm: If `True`, remove missing values before counting.\n\n    Returns:\n        The number of distinct values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"n_distinct\", _data)\n\n\n# glimpse\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"glimpse\"))\ndef glimpse(_data, width: int = None, formatter=None) -> Any:\n    \"\"\"Display a summary of a data frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/glimpse.html\n\n    Args:\n        _data: A data frame\n        width: Width of output, defaults to the width of the console.\n        formatter: A single-dispatch function to format a single element.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"glimpse\", _data)\n\n\n# slice\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_\"))\ndef slice_(_data, *args, _preserve: bool = False) -> Any:\n    \"\"\"Extract rows by their position\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        *args: Positions to extract.\n        _preserve: If `True`, keep grouping variables even if they are not used.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_head\"))\ndef slice_head(_data, n: int = None, prop: float = None) -> Any:\n    \"\"\"Extract the first rows\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        n: Number of rows to extract.\n        prop: Proportion of rows to extract.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice_head\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_tail\"))\ndef slice_tail(_data, n: int = None, prop: float = None) -> Any:\n    \"\"\"Extract the last rows\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        n: Number of rows to extract.\n        prop: Proportion of rows to extract.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice_tail\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_sample\"))\ndef slice_sample(\n    _data,\n    n: int = 1,\n    prop: float = None,\n    weight_by=None,\n    replace: bool = False,\n) -> Any:\n    \"\"\"Extract rows by sampling\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        n: Number of rows to extract.\n        prop: Proportion of rows to extract.\n        weight_by: A variable or function of variables to weight by.\n        replace: If `True`, sample with replacement.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice_sample\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_min\"))\ndef slice_min(\n    _data,\n    order_by,\n    n: int = 1,\n    prop: float = None,\n    with_ties: bool | str = None,\n) -> Any:\n    \"\"\"Extract rows with the minimum value\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        order_by: A variable or function of variables to order by.\n        n: Number of rows to extract.\n        prop: Proportion of rows to extract.\n        with_ties: If `True`, extract all rows with the minimum value.\n            If \"first\", extract the first row with the minimum value.\n            If \"last\", extract the last row with the minimum value.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice_min\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"slice_max\"))\ndef slice_max(\n    _data,\n    order_by,\n    n: int = 1,\n    prop: float = None,\n    with_ties: bool | str = None,\n) -> Any:\n    \"\"\"Extract rows with the maximum value\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/slice.html\n\n    Args:\n        _data: A data frame\n        order_by: A variable or function of variables to order by.\n        n: Number of rows to extract.\n        prop: Proportion of rows to extract.\n        with_ties: If `True`, extract all rows with the maximum value.\n            If \"first\", extract the first row with the maximum value.\n            If \"last\", extract the last row with the maximum value.\n\n    Returns:\n        The subset dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"slice_max\", _data)\n\n\n# misc funs\n@_register_func(pipeable=True, dispatchable=True)\ndef between(x, left, right, inclusive: str = \"both\") -> Any:\n    \"\"\"Check if a value is between two other values\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/between.html\n\n    Args:\n        x: A value\n        left: The left bound\n        right: The right bound\n        inclusive: Either `both`, `neither`, `left` or `right`.\n            Include boundaries. Whether to set each bound as closed or open.\n\n    Returns:\n        A bool value if `x` is scalar, otherwise an array of boolean values\n        Note that it will be always False when NA appears in x, left or right.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"between\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cummean(x, na_rm: bool = False) -> Any:\n    \"\"\"Cumulative mean\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/cumall.html\n\n    Args:\n        x: A numeric vector\n        na_rm: If `True`, remove missing values before computing.\n\n    Returns:\n        An array of cumulative means\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cummean\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cumall(x) -> Any:\n    \"\"\"Get cumulative bool. All cases after first False\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/cumall.html\n\n    Args:\n        x: A logical vector\n\n    Returns:\n        An array of cumulative conjunctions\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cumall\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cumany(x) -> Any:\n    \"\"\"Get cumulative bool. All cases after first True\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/cumany.html\n\n    Args:\n        x: A logical vector\n\n    Returns:\n        An array of cumulative disjunctions\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cumany\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef coalesce(x, *replace) -> Any:\n    \"\"\"Replace missing values with the first non-missing value\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/coalesce.html\n\n    Args:\n        x: A vector\n        *replace: Values to replace missing values with.\n\n    Returns:\n        An array of values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"coalesce\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef consecutive_id(x, *args) -> _Sequence[int]:\n    \"\"\"Generate consecutive ids\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/consecutive_id.html\n\n    Args:\n        x: A vector\n        *args: Other vectors\n\n    Returns:\n        A sequence of consecutive ids\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"consecutive_id\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef na_if(x, value) -> Any:\n    \"\"\"Replace values with missing values\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/na_if.html\n\n    Args:\n        x: A vector\n        value: Values to replace with missing values.\n\n    Returns:\n        An array of values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"na_if\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef near(x, y, tol: float = 1e-8) -> Any:\n    \"\"\"Check if values are approximately equal\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/near.html\n\n    Args:\n        x: A numeric vector\n        y: A numeric vector\n        tol: Tolerance\n\n    Returns:\n        An array of boolean values\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"near\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef nth(x, n, order_by=None, default=None) -> Any:\n    \"\"\"Extract the nth element of a vector\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/nth.html\n\n    Args:\n        x: A vector\n        n: The index of the element to extract.\n        order_by: A variable or function of variables to order by.\n        default: A default value to return if `n` is out of bounds.\n\n    Returns:\n        A value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nth\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef first(x, order_by=None, default=None) -> Any:\n    \"\"\"Extract the first element of a vector\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/nth.html\n\n    Args:\n        x: A vector\n        order_by: A variable or function of variables to order by.\n        default: A default value to return if `x` is empty.\n\n    Returns:\n        A value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"first\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef last(x, order_by=None, default=None) -> Any:\n    \"\"\"Extract the last element of a vector\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/nth.html\n\n    Args:\n        x: A vector\n        order_by: A variable or function of variables to order by.\n        default: A default value to return if `x` is empty.\n\n    Returns:\n        A value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"last\", x)\n\n\n# group_by\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_by\"))\ndef group_by(_data, *args, _add: bool = False, _drop: bool = None) -> Any:\n    \"\"\"Create a grouped frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_by.html\n\n    Args:\n        _data: A data frame\n        *args: A variable or function of variables to group by.\n        _add: If `True`, add grouping variables to an existing group.\n        _drop: If `True`, drop grouping variables from the output.\n\n    Returns:\n        A grouped frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_by\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"ungroup\"))\ndef ungroup(_data, *cols: str | int) -> Any:\n    \"\"\"Remove grouping variables\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/ungroup.html\n\n    Args:\n        _data: A grouped frame\n        *cols: Columns to remove grouping variables from.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"ungroup\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rowwise\"))\ndef rowwise(_data, *cols: str | int) -> Any:\n    \"\"\"Create a rowwise frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/rowwise.html\n\n    Args:\n        _data: A data frame\n        *cols: Columns to make rowwise.\n\n    Returns:\n        A rowwise frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rowwise\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_by_drop_default\"))\ndef group_by_drop_default(_data) -> Any:\n    \"\"\"Get the default value of `_drop` of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_by.html\n\n    Args:\n        _data: A data frame\n\n    Returns:\n        A bool value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_by_drop_default\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_vars\"))\ndef group_vars(_data) -> Any:\n    \"\"\"Get the grouping variables of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_vars.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of grouping variables\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_vars\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_indices\"))\ndef group_indices(_data) -> Any:\n    \"\"\"Get the group indices of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_indices.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group indices\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_indices\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_keys\"))\ndef group_keys(_data) -> Any:\n    \"\"\"Get the group keys of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_keys.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group keys\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_keys\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_size\"))\ndef group_size(_data) -> Any:\n    \"\"\"Get the group sizes of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_size.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group sizes\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_size\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_rows\"))\ndef group_rows(_data) -> Any:\n    \"\"\"Get the group rows of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_rows.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_rows\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_cols\"))\ndef group_cols(_data) -> Any:\n    \"\"\"Get the group columns of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_cols.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_cols\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_data\"))\ndef group_data(_data) -> Any:\n    \"\"\"Get the group data of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_data.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        A list of group data\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_data\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"n_groups\"))\ndef n_groups(_data) -> int:\n    \"\"\"Get the number of groups of a frame\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/n_groups.html\n\n    Args:\n        _data: A grouped frame\n\n    Returns:\n        An int value\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"n_groups\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_map\"))\ndef group_map(_data, _f, *args, _keep: bool = False, **kwargs) -> Any:\n    \"\"\"Apply a function to each group\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_map.html\n\n    Args:\n        _data: A grouped frame\n        _f: A function to apply to each group.\n        *args: Additional arguments to pass to `func`.\n        _keep: If `True`, keep the grouping variables in the output.\n        **kwargs: Additional keyword arguments to pass to `func`.\n\n    Returns:\n        A list of results\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_map\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_modify\"))\ndef group_modify(_data, _f, *args, _keep: bool = False, **kwargs) -> Any:\n    \"\"\"Apply a function to each group\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_modify.html\n\n    Args:\n        _data: A grouped frame\n        _f: A function to apply to each group.\n        *args: Additional arguments to pass to `func`.\n        _keep: If `True`, keep the grouping variables in the output.\n        **kwargs: Additional keyword arguments to pass to `func`.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_modify\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_split\"))\ndef group_split(_data, *args, _keep: bool = False, **kwargs) -> Any:\n    \"\"\"Split a grouped frame into a list of data frames\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_split.html\n\n    Args:\n        _data: A grouped frame\n        *args: Additional arguments to pass to `func`.\n        _keep: If `True`, keep the grouping variables in the output.\n        **kwargs: Additional keyword arguments to pass to `func`.\n\n    Returns:\n        A list of data frames\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_split\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_trim\"))\ndef group_trim(_data, _drop=None) -> Any:\n    \"\"\"Remove empty groups\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_trim.html\n\n    Args:\n        _data: A grouped frame\n        _drop: See `group_by`.\n\n    Returns:\n        A grouped frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_trim\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"group_walk\"))\ndef group_walk(_data, _f, *args, _keep: bool = False, **kwargs) -> Any:\n    \"\"\"Apply a function to each group\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/group_walk.html\n\n    Args:\n        _data: A grouped frame\n        _f: A function to apply to each group.\n        *args: Additional arguments to pass to `func`.\n        **kwargs: Additional keyword arguments to pass to `func`.\n\n    Returns:\n        A grouped frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"group_walk\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"with_groups\"))\ndef with_groups(_data, _groups, _func, *args, **kwargs) -> Any:\n    \"\"\"Modify the grouping variables for a single operation.\n\n    Args:\n        _data: A data frame\n        _groups: columns passed by group_by\n            Use None to temporarily ungroup.\n        _func: Function to apply to regrouped data.\n\n    Returns:\n        The new data frame with operations applied.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"with_groups\", _data)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef if_else(condition, true, false, missing=None) -> Any:\n    \"\"\"Where condition is TRUE, the matching value from true, where it's FALSE,\n    the matching value from false, otherwise missing.\n\n    Note that NAs will be False in condition if missing is not specified\n\n    Args:\n        condition: the conditions\n        true: and\n        false: Values to use for TRUE and FALSE values of condition.\n            They must be either the same length as condition, or length 1.\n        missing: If not None, will be used to replace missing values\n\n    Returns:\n        A series with values replaced.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"if_else\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef case_match(_x: T, *args, _default=None, _dtypes=None) -> T:\n    \"\"\"This function allows you to vectorise multiple `switch()` statements.\n    Each case is evaluated sequentially and the first match for each element\n    determines the corresponding value in the output vector.\n    If no cases match, the `_default` is used.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/case_match.html\n\n    Args:\n        _x: A vector\n        *args: A series of condition-value pairs\n        _default: The default value\n        _dtypes: The data types of the output\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"case_match\", _x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef case_when(cond, value, *more_cases) -> Any:\n    \"\"\"Vectorise multiple `if_else()` statements.\n\n    Args:\n        cond: A boolean vector\n        value: A vector with values to replace\n        *more_cases: A list of tuples (cond, value)\n\n    Returns:\n        A vector with values replaced.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"case_when\")\n\n\n# join\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"inner_join\"))\ndef inner_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    suffix: _Sequence[str] = (\"_x\", \"_y\"),\n    keep: bool = False,\n    na_matches: str = \"na\",\n    multiple: str = \"all\",\n    unmatched: str = \"drop\",\n    relationship: str = None,\n) -> Any:\n    \"\"\"Inner join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        suffix: A tuple of suffixes to apply to overlapping columns.\n        keep: If True, keep the grouping variables in the output.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n        multiple: How should multiple matches be handled?\n            \"all\": All matches are returned.\n            \"first\": The first match is returned.\n            \"last\": The last match is returned.\n            \"any\": Any of the matched rows in y\n        unmatched: How should unmatched keys that would result in dropped rows\n            be handled?\n            \"drop\": Drop unmatched keys.\n            \"error\": Raise an error.\n        relationship: The relationship between x and y.\n            None: No expected relationship.\n            \"one_to_one\": Each row in x matches at most one row in y.\n            \"one_to_many\": Each row in x matches zero or more rows in y.\n            \"many_to_one\": Each row in x matches at most one row in y.\n            \"many_to_many\": Each row in x matches zero or more rows in y.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"inner_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"left_join\"))\ndef left_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    suffix: _Sequence[str] = (\"_x\", \"_y\"),\n    keep: bool = False,\n    na_matches: str = \"na\",\n    multiple: str = \"all\",\n    unmatched: str = \"drop\",\n    relationship: str = None,\n) -> Any:\n    \"\"\"Left join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        suffix: A tuple of suffixes to apply to overlapping columns.\n        keep: If True, keep the grouping variables in the output.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n        multiple: How should multiple matches be handled?\n            \"all\": All matches are returned.\n            \"first\": The first match is returned.\n            \"last\": The last match is returned.\n            \"any\": Any of the matched rows in y\n        unmatched: How should unmatched keys that would result in dropped rows\n            be handled?\n            \"drop\": Drop unmatched keys.\n            \"error\": Raise an error.\n        relationship: The relationship between x and y.\n            None: No expected relationship.\n            \"one_to_one\": Each row in x matches at most one row in y.\n            \"one_to_many\": Each row in x matches zero or more rows in y.\n            \"many_to_one\": Each row in x matches at most one row in y.\n            \"many_to_many\": Each row in x matches zero or more rows in y.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"left_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"right_join\"))\ndef right_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    suffix: _Sequence[str] = (\"_x\", \"_y\"),\n    keep: bool = False,\n    na_matches: str = \"na\",\n    multiple: str = \"all\",\n    unmatched: str = \"drop\",\n    relationship: str = None,\n) -> Any:\n    \"\"\"Right join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        suffix: A tuple of suffixes to apply to overlapping columns.\n        keep: If True, keep the grouping variables in the output.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n        multiple: How should multiple matches be handled?\n            \"all\": All matches are returned.\n            \"first\": The first match is returned.\n            \"last\": The last match is returned.\n            \"any\": Any of the matched rows in y\n        unmatched: How should unmatched keys that would result in dropped rows\n            be handled?\n            \"drop\": Drop unmatched keys.\n            \"error\": Raise an error.\n        relationship: The relationship between x and y.\n            None: No expected relationship.\n            \"one_to_one\": Each row in x matches at most one row in y.\n            \"one_to_many\": Each row in x matches zero or more rows in y.\n            \"many_to_one\": Each row in x matches at most one row in y.\n            \"many_to_many\": Each row in x matches zero or more rows in y.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"right_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"full_join\"))\ndef full_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    suffix: _Sequence[str] = (\"_x\", \"_y\"),\n    keep: bool = False,\n    na_matches: str = \"na\",\n    multiple: str = \"all\",\n    unmatched: str = \"drop\",\n    relationship: str = None,\n) -> Any:\n    \"\"\"Full join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        suffix: A tuple of suffixes to apply to overlapping columns.\n        keep: If True, keep the grouping variables in the output.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n        multiple: How should multiple matches be handled?\n            \"all\": All matches are returned.\n            \"first\": The first match is returned.\n            \"last\": The last match is returned.\n            \"any\": Any of the matched rows in y\n        unmatched: How should unmatched keys that would result in dropped rows\n            be handled?\n            \"drop\": Drop unmatched keys.\n            \"error\": Raise an error.\n        relationship: The relationship between x and y.\n            None: No expected relationship.\n            \"one_to_one\": Each row in x matches at most one row in y.\n            \"one_to_many\": Each row in x matches zero or more rows in y.\n            \"many_to_one\": Each row in x matches at most one row in y.\n            \"many_to_many\": Each row in x matches zero or more rows in y.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"full_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"semi_join\"))\ndef semi_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    na_matches: str = \"na\",\n) -> Any:\n    \"\"\"Semi join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"semi_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"anti_join\"))\ndef anti_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    na_matches: str = \"na\",\n) -> Any:\n    \"\"\"Anti join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"anti_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"nest_join\"))\ndef nest_join(\n    x,\n    y,\n    by=None,\n    copy: bool = False,\n    keep: bool = False,\n    name=None,\n    na_matches: str = \"na\",\n    unmatched: str = \"drop\",\n) -> Any:\n    \"\"\"Nest join two data frames by matching rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: A list of column names to join by.\n            If None, use the intersection of the columns of x and y.\n        copy: If True, always copy the data.\n        keep: If True, keep the grouping variables in the output.\n        name: The name of the column to store the nested data frame.\n        na_matches: How should NA values be matched?\n            \"na\": NA values are equal.\n            \"never\": NA values are never matched.\n        unmatched: How should unmatched keys that would result in dropped rows\n            be handled?\n            \"drop\": Drop unmatched keys.\n            \"error\": Raise an error.\n\n    Returns:\n        A data frame\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nest_join\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"cross_join\"))\ndef cross_join(\n    x: T,\n    y: T,\n    copy: bool = False,\n    suffix: _Sequence[str] = (\"_x\", \"_y\"),\n) -> T:\n    \"\"\"Cross joins match each row in x to every row in y, resulting in a\n    data frame with nrow(x) * nrow(y) rows.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/cross_join.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        copy: If True, always copy the data.\n        suffix: A tuple of suffixes to apply to overlapping columns.\n\n    Returns:\n        An object of the same type as x (including the same groups).\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"cross_join\", x)\n\n\n# lead/lag\n@_register_func(pipeable=True, dispatchable=True)\ndef lead(x, n=1, default=None, order_by=None) -> Any:\n    \"\"\"Shift a vector by `n` positions.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/lead.html\n\n    Args:\n        x: A vector\n        n: The number of positions to shift.\n        default: The default value to use for positions that don't exist.\n        order_by: A vector of column names to order by.\n\n    Returns:\n        A vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lead\", x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lag(x, n=1, default=None, order_by=None) -> Any:\n    \"\"\"Shift a vector by `n` positions.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/lag.html\n\n    Args:\n        x: A vector\n        n: The number of positions to shift.\n        default: The default value to use for positions that don't exist.\n        order_by: A vector of column names to order by.\n\n    Returns:\n        A vector\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lag\", x)\n\n\n# mutate\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"mutate\"))\ndef mutate(\n    _data, *args, _keep: str = \"all\", _before=None, _after=None, **kwargs\n) -> Any:\n    \"\"\"Add new columns to a data frame.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/mutate.html\n\n    Args:\n        _data: A data frame\n        _keep: allows you to control which columns from _data are retained\n            in the output:\n            - \"all\", the default, retains all variables.\n            - \"used\" keeps any variables used to make new variables;\n              it's useful for checking your work as it displays inputs and\n              outputs side-by-side.\n            - \"unused\" keeps only existing variables not used to make new\n                variables.\n            - \"none\", only keeps grouping keys (like transmute()).\n        _before: A list of column names to put the new columns before.\n        _after: A list of column names to put the new columns after.\n        *args: and\n        **kwargs: Name-value pairs. The name gives the name of the column\n            in the output. The value can be:\n            - A vector of length 1, which will be recycled to the correct\n                length.\n            - A vector the same length as the current group (or the whole\n                data frame if ungrouped).\n            - None to remove the column\n\n    Returns:\n        An object of the same type as _data. The output has the following\n        properties:\n        - Rows are not affected.\n        - Existing columns will be preserved according to the _keep\n            argument. New columns will be placed according to the\n            _before and _after arguments. If _keep = \"none\"\n            (as in transmute()), the output order is determined only\n            by ..., not the order of existing columns.\n        - Columns given value None will be removed\n        - Groups will be recomputed if a grouping variable is mutated.\n        - Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"mutate\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"transmute\"))\ndef transmute(_data, *args, _before=None, _after=None, **kwargs) -> Any:\n    \"\"\"Add new columns to a data frame and remove existing columns\n    using mutate with `_keep=\"none\"`.\n\n    The original API:\n    https://dplyr.tidyverse.org/reference/mutate.html\n\n    Args:\n        _data: A data frame\n        _before: A list of column names to put the new columns before.\n        _after: A list of column names to put the new columns after.\n        *args: and\n        **kwargs: Name-value pairs. The name gives the name of the column\n            in the output. The value can be:\n            - A vector of length 1, which will be recycled to the correct\n                length.\n            - A vector the same length as the current group (or the whole\n                data frame if ungrouped).\n            - None to remove the column\n\n    Returns:\n        An object of the same type as _data. The output has the following\n        properties:\n        - Rows are not affected.\n        - Existing columns will be preserved according to the _keep\n            argument. New columns will be placed according to the\n            _before and _after arguments. If _keep = \"none\"\n            (as in transmute()), the output order is determined only\n            by ..., not the order of existing columns.\n        - Columns given value None will be removed\n        - Groups will be recomputed if a grouping variable is mutated.\n        - Data frame attributes are preserved.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"transmute\", _data)\n\n\n# order_by\n@_register_func(plain=True)\ndef order_by(order, call) -> Any:\n    \"\"\"Order the data by the given order\n\n    Note:\n        This function should be called as an argument\n        of a verb. If you want to call it regularly, try `with_order()`\n\n    Examples:\n        >>> df = tibble(x=c[1:6])\n        >>> df >> mutate(y=order_by(c[5:], cumsum(f.x)))\n        >>> # df.y:\n        >>> # 15, 14, 12, 9, 5\n\n    Args:\n        order: An iterable to control the data order\n        data: The data to be ordered\n\n    Returns:\n        A Function expression for verb to evaluate.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"order_by\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef with_order(order, func, x, *args, **kwargs) -> Any:\n    \"\"\"Control argument and result of a window function\n\n    Examples:\n        >>> with_order([5,4,3,2,1], cumsum, [1,2,3,4,5])\n        >>> # 15, 14, 12, 9, 5\n\n    Args:\n        order: An iterable to order the arugment and result\n        func: The window function\n        x: The first arugment for the function\n        *args: and\n        **kwargs: Other arugments for the function\n\n    Returns:\n        The ordered result or an expression if there is expression in arguments\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"with_order\", order)\n\n\n# pull\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"pull\"))\ndef pull(_data, var: str | int = -1, name=None, to=None) -> Any:\n    \"\"\"Pull a series or a dataframe from a dataframe\n\n    Args:\n        _data: The dataframe\n        var: The column to pull, either the name or the index\n        name: The name of the pulled value\n            - If `to` is frame, or the value pulled is data frame, it will be\n              the column names\n            - If `to` is series, it will be the series name. If multiple names\n              are given, only the first name will be used.\n            - If `to` is series, but value pulled is a data frame, then a\n              dictionary of series with the series names as keys or given `name`\n              as keys.\n        to: Type of data to return.\n            Only works when pulling `a` for name `a$b`\n            - series: Return a pandas Series object\n              Group information will be lost\n              If pulled value is a dataframe, it will return a dict of series,\n              with the series names or the `name` provided.\n            - array: Return a numpy.ndarray object\n            - frame: Return a DataFrame with that column\n            - list: Return a python list\n            - dict: Return a dict with `name` as keys and pulled value as values\n              Only a single column is allowed to pull\n            - If not provided: `series` when pulled data has only one columns.\n                `dict` if `name` provided and has the same length as the pulled\n                single column. Otherwise `frame`.\n\n    Returns:\n        The data according to `to`\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pull\", _data)\n\n\ndef row_number(x=_f_symbolic) -> Any:\n    \"\"\"Get the row number of x\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get row number\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `row_number()`\n\n    Returns:\n        The row number\n    \"\"\"\n    return row_number_(x, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef row_number_(x) -> Any:\n    raise _NotImplementedByCurrentBackendError(\"row_number\", x)\n\n\ndef ntile(x=_f_symbolic, *, n: int = None) -> Any:\n    \"\"\"a rough rank, which breaks the input vector into n buckets.\n    The size of the buckets may differ by up to one, larger buckets\n    have lower rank.\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get  rownumber\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `ntile(n=...)`\n        n: The number of groups to divide the data into\n\n    Returns:\n        The row number\n    \"\"\"\n    return ntile_(x, n=n, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef ntile_(x, *, n: int = None) -> Any:\n    raise _NotImplementedByCurrentBackendError(\"ntile\", x)\n\n\ndef min_rank(x=_f_symbolic, *, na_last: str = \"keep\") -> Any:\n    \"\"\"Get the min rank of x\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get row number\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `min_rank()`\n        na_last: How NA values are ranked\n            - \"keep\": NA values are ranked at the end\n            - \"top\": NA values are ranked at the top\n            - \"bottom\": NA values are ranked at the bottom\n\n    Returns:\n        The row number\n    \"\"\"\n    return min_rank_(x, na_last=na_last, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef min_rank_(x, *, na_last: str = \"keep\") -> Any:\n    raise _NotImplementedByCurrentBackendError(\"min_rank\", x)\n\n\ndef dense_rank(x=_f_symbolic, *, na_last: str = \"keep\") -> Any:\n    \"\"\"Get the dense rank of x\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get row number\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `dense_rank()`\n        na_last: How NA values are ranked\n            - \"keep\": NA values are ranked at the end\n            - \"top\": NA values are ranked at the top\n            - \"bottom\": NA values are ranked at the bottom\n\n    Returns:\n        The row number\n    \"\"\"\n    return dense_rank_(x, na_last=na_last, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef dense_rank_(x, *, na_last: str = \"keep\") -> Any:\n    raise _NotImplementedByCurrentBackendError(\"dense_rank\", x)\n\n\ndef percent_rank(x=_f_symbolic, *, na_last: str = \"keep\") -> Any:\n    \"\"\"Get the percent rank of x\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get row number\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `percent_rank()`\n        na_last: How NA values are ranked\n            - \"keep\": NA values are ranked at the end\n            - \"top\": NA values are ranked at the top\n            - \"bottom\": NA values are ranked at the bottom\n\n    Returns:\n        The row number\n    \"\"\"\n    return percent_rank_(x, na_last=na_last, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef percent_rank_(x, *, na_last: str = \"keep\") -> Any:\n    raise _NotImplementedByCurrentBackendError(\"percent_rank\", x)\n\n\ndef cume_dist(x=_f_symbolic, *, na_last: str = \"keep\") -> Any:\n    \"\"\"Get the cume_dist of x\n\n    Note that this function doesn't support piping.\n\n    Args:\n        x: The data to get row number\n            Defaults to `Symbolic()` so the whole data is used by default\n            when called `cume_dist()`\n        na_last: How NA values are ranked\n            - \"keep\": NA values are ranked at the end\n            - \"top\": NA values are ranked at the top\n            - \"bottom\": NA values are ranked at the bottom\n\n    Returns:\n        The row number\n    \"\"\"\n    return cume_dist_(x, na_last=na_last, __ast_fallback=\"normal\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef cume_dist_(x, *, na_last: str = \"keep\") -> Any:\n    raise _NotImplementedByCurrentBackendError(\"cume_dist\", x)\n\n\n# recode\n@_register_func(pipeable=True, dispatchable=True)\ndef recode(_x, *args, _default=None, _missing=None, **kwargs) -> Any:\n    \"\"\"Recode a vector, replacing elements in it\n\n    Args:\n        x: A vector to modify\n        *args: and\n        **kwargs: replacements\n        _default: If supplied, all values not otherwise matched will be\n            given this value. If not supplied and if the replacements are\n            the same type as the original values in series, unmatched values\n            are not changed. If not supplied and if the replacements are\n            not compatible, unmatched values are replaced with np.nan.\n        _missing: If supplied, any missing values in .x will be replaced\n            by this value.\n\n    Returns:\n        The vector with values replaced\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"recode\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef recode_factor(\n    _x,\n    *args,\n    _default=None,\n    _missing=None,\n    _ordered: bool = False,\n    **kwargs,\n) -> Any:\n    \"\"\"Recode a factor, replacing levels in it\n\n    Args:\n        x: A factor to modify\n        *args: and\n        **kwargs: replacements\n        _default: If supplied, all values not otherwise matched will be\n            given this value. If not supplied and if the replacements are\n            the same type as the original values in series, unmatched values\n            are not changed. If not supplied and if the replacements are\n            not compatible, unmatched values are replaced with np.nan.\n        _missing: If supplied, any missing values in .x will be replaced\n            by this value.\n        _ordered: If True, the factor will be ordered\n\n    Returns:\n        The factor with levels replaced\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"recode_factor\")\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"relocate\"))\ndef relocate(\n    _data,\n    *args,\n    _before: int | str = None,\n    _after: int | str = None,\n    **kwargs,\n) -> Any:\n    \"\"\"change column positions\n\n    See original API\n    https://dplyr.tidyverse.org/reference/relocate.html\n\n    Args:\n        _data: A data frame\n        *args: and\n        **kwargs: Columns to rename and move\n        _before: and\n        _after: Destination. Supplying neither will move columns to\n            the left-hand side; specifying both is an error.\n\n    Returns:\n        An object of the same type as .data. The output has the following\n        properties:\n        - Rows are not affected.\n        - The same columns appear in the output, but (usually) in a\n            different place.\n        - Data frame attributes are preserved.\n        - Groups are not affected\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"relocate\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rename\"))\ndef rename(_data, **kwargs) -> Any:\n    \"\"\"Rename columns\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rename.html\n\n    Args:\n        _data: A data frame\n        **kwargs: Columns to rename\n\n    Returns:\n        The dataframe with new names\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rename\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rename_with\"))\ndef rename_with(_data, _fn, *args, **kwargs) -> Any:\n    \"\"\"Rename columns with a function\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rename.html\n\n    Args:\n        _data: A data frame\n        _fn: A function to apply to column names\n        *args: the columns to rename and non-keyword arguments for the `_fn`.\n            If `*args` is not provided, then assuming all columns, and\n            no non-keyword arguments are allowed to pass to the function, use\n            keyword arguments instead.\n        **kwargs: keyword arguments for `_fn`\n\n    Returns:\n        The dataframe with new names\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rename_with\", _data)\n\n\n# rows\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_insert\"))\ndef rows_insert(\n    x,\n    y,\n    by=None,\n    conflict: str = \"error\",\n    **kwargs,\n) -> Any:\n    \"\"\"Insert rows from y into x\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: An unnamed character vector giving the key columns.\n            The key columns must exist in both x and y.\n            Keys typically uniquely identify each row, but this is only\n            enforced for the key values of y\n            By default, we use the first column in y, since the first column is\n            a reasonable place to put an identifier variable.\n        conflict: How to handle conflicts\n            - \"error\": Throw an error\n            - \"ignore\": Ignore conflicts\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with all existing rows and potentially new rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_insert\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_update\"))\ndef rows_update(\n    x,\n    y,\n    by=None,\n    unmatched: str = \"error\",\n    **kwargs,\n) -> Any:\n    \"\"\"Update rows in x with values from y\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: An unnamed character vector giving the key columns.\n            The key columns must exist in both x and y.\n            Keys typically uniquely identify each row, but this is only\n            enforced for the key values of y\n            By default, we use the first column in y, since the first column is\n            a reasonable place to put an identifier variable.\n        unmatched: how should keys in y that are unmatched by the keys\n            in x be handled?\n            One of -\n            \"error\", the default, will error if there are any keys in y that\n            are unmatched by the keys in x.\n            \"ignore\" will ignore rows in y with keys that are unmatched\n            by the keys in x.\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with all existing rows and potentially new rows\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_update\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_patch\"))\ndef rows_patch(\n    x,\n    y,\n    by=None,\n    unmatched: str = \"error\",\n    **kwargs,\n) -> Any:\n    \"\"\"Patch rows in x with values from y\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: An unnamed character vector giving the key columns.\n            The key columns must exist in both x and y.\n            Keys typically uniquely identify each row, but this is only\n            enforced for the key values of y\n            By default, we use the first column in y, since the first column is\n            a reasonable place to put an identifier variable.\n        unmatched: how should keys in y that are unmatched by the keys\n            in x be handled?\n            One of -\n            \"error\", the default, will error if there are any keys in y that\n            are unmatched by the keys in x.\n            \"ignore\" will ignore rows in y with keys that are unmatched\n            by the keys in x.\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with NA values overwritten and the number of rows preserved\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_patch\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_upsert\"))\ndef rows_upsert(x, y, by=None, **kwargs) -> Any:\n    \"\"\"Upsert rows in x with values from y\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: An unnamed character vector giving the key columns.\n            The key columns must exist in both x and y.\n            Keys typically uniquely identify each row, but this is only\n            enforced for the key values of y\n            By default, we use the first column in y, since the first column is\n            a reasonable place to put an identifier variable.\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with inserted or updated depending on whether or not\n        the key value in y already exists in x. Key values in y must be unique.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_upsert\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_delete\"))\ndef rows_delete(\n    x,\n    y,\n    by=None,\n    unmatched: str = \"error\",\n    **kwargs,\n) -> Any:\n    \"\"\"Delete rows in x that match keys in y\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        by: An unnamed character vector giving the key columns.\n            The key columns must exist in both x and y.\n            Keys typically uniquely identify each row, but this is only\n            enforced for the key values of y\n            By default, we use the first column in y, since the first column is\n            a reasonable place to put an identifier variable.\n        unmatched: how should keys in y that are unmatched by the keys\n            in x be handled?\n            One of -\n            \"error\", the default, will error if there are any keys in y that\n            are unmatched by the keys in x.\n            \"ignore\" will ignore rows in y with keys that are unmatched\n            by the keys in x.\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with rows deleted\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_delete\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rows_append\"))\ndef rows_append(x, y, **kwargs) -> Any:\n    \"\"\"Append rows in y to x\n\n    See original API\n    https://dplyr.tidyverse.org/reference/rows.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n        **kwargs: Additional arguments to pass to the backend, such as\n            `copy` and `in_place`. Depends on the backend implementation.\n\n    Returns:\n        A data frame with rows appended\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rows_append\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"select\"))\ndef select(_data, *args, **kwargs) -> Any:\n    \"\"\"Select columns from a data frame.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        *args: A list of columns to select\n        **kwargs: A list of columns to select\n\n    Returns:\n        A data frame with only the selected columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"select\", _data)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef union_all(x, y) -> Any:\n    \"\"\"Combine two data frames together.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/setops.html\n\n    Args:\n        x: A data frame\n        y: A data frame\n\n    Returns:\n        A data frame with rows from x and y\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"union_all\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"summarise\"))\ndef summarise(_data, *args, _groups: str = None, **kwargs) -> Any:\n    \"\"\"Summarise a data frame.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/summarise.html\n\n    Args:\n        _data: A data frame\n        _groups: Grouping structure of the result.\n            - \"drop_last\": dropping the last level of grouping.\n            - \"drop\": All levels of grouping are dropped.\n            - \"keep\": Same grouping structure as _data.\n            - \"rowwise\": Each row is its own group.\n        *args: and\n        **kwargs: Name-value pairs, where value is the summarized\n            data for each group\n\n    Returns:\n        A data frame with the summarised columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"summarise\", _data)\n\n\nsummarize = summarise\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"reframe\"))\ndef reframe(_data, *args, **kwargs) -> Any:\n    \"\"\"Reframe a data frame.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/reframe.html\n\n    Args:\n        _data: A data frame\n        *args: and\n        **kwargs: Name-value pairs, where value is the reframed\n            data for each group\n\n    Returns:\n        A data frame with the reframed columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"reframe\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"where\"))\ndef where(_data, fn: _Callable) -> Any:\n    \"\"\"Selects the variables for which a function returns True.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/filter.html\n\n    Args:\n        _data: A data frame\n        fn: A function that returns True or False.\n            Currently it has to be `register_func/func_factory\n            registered function purrr-like formula not supported yet.\n\n    Returns:\n        The matched columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"where\", _data)\n\n\n@_register_verb(\n    dependent=True, ast_fallback=_get_verb_ast_fallback(\"everything\")\n)\ndef everything(_data) -> Any:\n    \"\"\"Select all variables.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n\n    Returns:\n        All columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"everything\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"last_col\"))\ndef last_col(_data, offset: int = 0, vars=None) -> Any:\n    \"\"\"Select the last column.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        offset: The offset of the last column\n        vars: A list of columns to select\n\n    Returns:\n        The last column\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"last_col\", _data)\n\n\n@_register_verb(\n    dependent=True, ast_fallback=_get_verb_ast_fallback(\"starts_with\")\n)\ndef starts_with(_data, match, ignore_case: bool = True, vars=None) -> Any:\n    \"\"\"Select columns that start with a string.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        match: The string to match\n        ignore_case: Ignore case when matching\n        vars: A list of columns to select\n\n    Returns:\n        The matched columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"starts_with\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"ends_with\"))\ndef ends_with(_data, match, ignore_case: bool = True, vars=None) -> Any:\n    \"\"\"Select columns that end with a string.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        match: The string to match\n        ignore_case: Ignore case when matching\n        vars: A list of columns to select\n\n    Returns:\n        The matched columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"ends_with\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"contains\"))\ndef contains(_data, match, ignore_case: bool = True, vars=None) -> Any:\n    \"\"\"Select columns that contain a string.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        match: The string to match\n        ignore_case: Ignore case when matching\n        vars: A list of columns to select\n\n    Returns:\n        The matched columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"contains\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"matches\"))\ndef matches(_data, match, ignore_case: bool = True, vars=None) -> Any:\n    \"\"\"Select columns that match a regular expression.\n\n    See original API\n    https://dplyr.tidyverse.org/reference/select.html\n\n    Args:\n        _data: A data frame\n        match: The regular expression to match\n        ignore_case: Ignore case when matching\n        vars: A list of columns to select\n\n    Returns:\n        The matched columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"matches\", _data)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef num_range(prefix: str, range_, width: int = None) -> Any:\n    \"\"\"Matches a numerical range like x01, x02, x03.\n\n    Args:\n        _data: The data piped in\n        prefix: A prefix that starts the numeric range.\n        range_: A sequence of integers, like `range(3)` (produces `0,1,2`).\n        width: Optionally, the \"width\" of the numeric range.\n            For example, a range of 2 gives \"01\", a range of three \"001\", etc.\n\n    Returns:\n        A list of ranges with prefix.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"num_range\")\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"all_of\"))\ndef all_of(_data, x) -> Any:\n    \"\"\"For strict selection.\n\n    If any of the variables in the character vector is missing,\n    an error is thrown.\n\n    Args:\n        _data: The data piped in\n        x: A set of variables to match the columns\n\n    Returns:\n        The matched column names\n\n    Raises:\n        ColumnNotExistingError: When any of the elements in `x` does not exist\n            in `_data` columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"all_of\", _data)\n\n\n@_register_verb(dependent=True, ast_fallback=_get_verb_ast_fallback(\"any_of\"))\ndef any_of(_data, x, vars=None) -> Any:\n    \"\"\"For strict selection.\n\n    If any of the variables in the character vector is missing,\n    an error is thrown.\n\n    Args:\n        _data: The data piped in\n        x: A set of variables to match the columns\n        vars: A list of columns to select\n\n    Returns:\n        The matched column names\n\n    Raises:\n        ColumnNotExistingError: When any of the elements in `x` does not exist\n            in `_data` columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"any_of\", _data)\n"
  },
  {
    "path": "datar/apis/forcats.py",
    "content": "\nfrom typing import Any\n\nfrom pipda import register_func as _register_func\n\nfrom ..core.utils import (\n    NotImplementedByCurrentBackendError as _NotImplementedByCurrentBackendError,\n)\nfrom .base import as_factor  # noqa: F401\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_relevel(_f, *lvls, after: int = None) -> Any:\n    \"\"\"Reorder factor levels by hand\n\n    Args:\n        _f: A factor (categoriccal), or a string vector\n        *lvls: Either a function (then `len(lvls)` should equal to `1`) or\n            the new levels.\n            A function will be called with the current levels as input, and the\n            return value (which must be a character vector) will be used to\n            relevel the factor.\n            Any levels not mentioned will be left in their existing order,\n            by default after the explicitly mentioned levels.\n        after: Where should the new values be placed?\n\n    Returns:\n        The factor with levels replaced\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_relevel\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_inorder(_f, ordered: bool = None) -> Any:\n    \"\"\"Reorder factor levels by first appearance\n\n    Args:\n        _f: A factor\n        ordered: A logical which determines the \"ordered\" status of the\n            output factor.\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_inorder\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_infreq(_f, ordered: bool = None) -> Any:\n    \"\"\"Reorder factor levels by frequency\n\n    Args:\n        _f: A factor\n        ordered: A logical which determines the \"ordered\" status of the\n            output factor.\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_infreq\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_inseq(_f, ordered: bool = None) -> Any:\n    \"\"\"Reorder factor levels by sequence\n\n    Args:\n        _f: A factor\n        ordered: A logical which determines the \"ordered\" status of the\n            output factor.\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_inseq\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_reorder(_f, _x, *args, _fun=None, _desc: bool = False, **kwargs) -> Any:\n    \"\"\"Reorder factor levels by a function (default: median)\n\n    Args:\n        _f: A factor\n        _x: The data to be used to reorder the factor\n        _fun: A function to be used to reorder the factor\n        _desc: If `True`, the factor will be reordered in descending order\n        *args: Extra arguments to be passed to `_fun`\n        **kwargs: Extra keyword arguments to be passed to `_fun`\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_reorder\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_reorder2(\n    _f,\n    _x,\n    *args,\n    _fun=None,\n    _desc: bool = False,\n    **kwargs,\n) -> Any:\n    \"\"\"Reorder factor levels by a function (default: `last2`)\n\n    Args:\n        _f: A factor\n        _x: The data to be used to reorder the factor\n        _fun: A function to be used to reorder the factor\n        _desc: If `True`, the factor will be reordered in descending order\n        *args: Extra arguments to be passed to `_fun`\n        **kwargs: Extra keyword arguments to be passed to `_fun`\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_reorder2\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_shuffle(_f) -> Any:\n    \"\"\"Shuffle the levels of a factor\n\n    Args:\n        _f: A factor\n\n    Returns:\n        The factor with levels shuffled\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_shuffle\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_rev(_f) -> Any:\n    \"\"\"Reverse the order of the levels of a factor\n\n    Args:\n        _f: A factor\n\n    Returns:\n        The factor with levels reversed\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_rev\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_shift(_f, n: int = 1) -> Any:\n    \"\"\"Shift the levels of a factor\n\n    Args:\n        _f: A factor\n        n: The number of levels to shift\n\n    Returns:\n        The factor with levels shifted\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_shift\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef first2(_x, _y) -> Any:\n    \"\"\"Find the first element of `_y` ordered by `_x`\n\n    Args:\n        _x: The vector used to order `_y`\n        _y: The vector to get the first element of\n\n    Returns:\n        First element of `_y` ordered by `_x`\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"first2\", _x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef last2(_x, _y) -> Any:\n    \"\"\"Find the last element of `_y` ordered by `_x`\n\n    Args:\n        _x: The vector used to order `_y`\n        _y: The vector to get the last element of\n\n    Returns:\n        Last element of `_y` ordered by `_x`\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"last2\", _x)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_anon(_f, prefix: str = \"\") -> Any:\n    \"\"\"Anonymise factor levels\n\n    Args:\n        f: A factor.\n        prefix: A character prefix to insert in front of the random labels.\n\n    Returns:\n        The factor with levels anonymised\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_anon\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_recode(_f, *args, **kwargs) -> Any:\n    \"\"\"Change factor levels by hand\n\n    Args:\n        _f: A factor\n        *args: and\n        **kwargs: A sequence of named character vectors where the name\n            gives the new level, and the value gives the old level.\n            Levels not otherwise mentioned will be left as is. Levels can\n            be removed by naming them `NULL`.\n            As `NULL/None` cannot be a name of keyword arguments, replacement\n            has to be specified as a dict\n            (i.e. `fct_recode(x, {NULL: \"apple\"})`)\n            If you want to replace multiple values with the same old value,\n            use a `set`/`list`/`numpy.ndarray`\n            (i.e. `fct_recode(x, fruit=[\"apple\", \"banana\"])`).\n            This is a safe way, since `set`/`list`/`numpy.ndarray` is\n            not hashable to be a level of a factor.\n            Do NOT use a `tuple`, as it's hashable!\n\n            Note that the order of the name-value is in the reverse way as\n            `dplyr.recode()` and `dplyr.recode_factor()`\n\n    Returns:\n        The factor recoded with given recodings\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_recode\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_collapse(_f, other_level=None, **kwargs) -> Any:\n    \"\"\"Collapse factor levels into manually defined groups\n\n    Args:\n        _f: A factor\n        **kwargs: The levels to collapse.\n            Like `name=[old_level, old_level1, ...]`. The old levels will\n            be replaced with `name`\n        other_level: Replace all levels not named in `kwargs`.\n            If not, don't collapse them.\n\n    Returns:\n        The factor with levels collapsed.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_collapse\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_lump(\n    _f,\n    n=None,\n    prop=None,\n    w=None,\n    other_level=\"Other\",\n    ties_method: str = \"min\",\n) -> Any:\n    \"\"\"Lump together factor levels into \"other\"\n\n    Args:\n        f: A factor\n        n: Positive `n` preserves the most common `n` values.\n            Negative `n` preserves the least common `-n` values.\n            It there are ties, you will get at least `abs(n)` values.\n        prop: Positive `prop` lumps values which do not appear at least\n            `prop` of the time. Negative `prop` lumps values that\n            do not appear at most `-prop` of the time.\n        w: An optional numeric vector giving weights for frequency of\n            each value (not level) in f.\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n        ties_method A character string specifying how ties are treated.\n            One of: `average`, `first`, `dense`, `max`, and `min`.\n\n    Returns:\n        The factor with levels lumped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_lump\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_lump_min(_f, min_, w=None, other_level=\"Other\") -> Any:\n    \"\"\"lumps levels that appear fewer than `min_` times.\n\n    Args:\n        _f: A factor\n        min_: Preserve levels that appear at least `min_` number of times.\n        w: An optional numeric vector giving weights for frequency of\n            each value (not level) in f.\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n\n    Returns:\n        The factor with levels lumped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_lump_min\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_lump_prop(_f, prop, w=None, other_level=\"Other\") -> Any:\n    \"\"\"Lumps levels that appear in fewer `prop * n` times.\n\n    Args:\n        _f: A factor\n        prop: Positive `prop` lumps values which do not appear at least\n            `prop` of the time. Negative `prop` lumps values that\n            do not appear at most `-prop` of the time.\n        w: An optional numeric vector giving weights for frequency of\n            each value (not level) in f.\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n\n    Returns:\n        The factor with levels lumped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_lump_prop\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_lump_n(_f, n, w=None, other_level=\"Other\") -> Any:\n    \"\"\"Lumps all levels except for the `n` most frequent.\n\n    Args:\n        f: A factor\n        n: Positive `n` preserves the most common `n` values.\n            Negative `n` preserves the least common `-n` values.\n            It there are ties, you will get at least `abs(n)` values.\n        w: An optional numeric vector giving weights for frequency of\n            each value (not level) in f.\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n        ties_method A character string specifying how ties are treated.\n            One of: `average`, `first`, `dense`, `max`, and `min`.\n\n    Returns:\n        The factor with levels lumped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_lump_n\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_lump_lowfreq(_f, other_level=\"Other\") -> Any:\n    \"\"\"lumps together the least frequent levels, ensuring\n    that \"other\" is still the smallest level.\n\n    Args:\n        f: A factor\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n\n    Returns:\n        The factor with levels lumped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_lump_lowfreq\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_other(_f, keep=None, drop=None, other_level=\"Other\") -> Any:\n    \"\"\"Replace levels with \"other\"\n\n    Args:\n        _f: A factor\n        keep: and\n        drop: Pick one of `keep` and `drop`:\n            - `keep` will preserve listed levels, replacing all others with\n                `other_level`.\n            - `drop` will replace listed levels with `other_level`, keeping all\n                as is.\n        other_level: Value of level used for \"other\" values. Always\n            placed at end of levels.\n\n    Returns:\n        The factor with levels replaced.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_other\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_relabel(_f, _fun, *args, **kwargs) -> Any:\n    \"\"\"Automatically relabel factor levels, collapse as necessary\n\n    Args:\n        _f: A factor\n        _fun: A function to be applied to each level. Must accept the old\n            levels and return a character vector of the same length\n            as its input.\n        *args: and\n        **kwargs: Addtional arguments to `_fun`\n\n    Returns:\n        The factor with levels relabeled\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_relabel\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_expand(_f, *additional_levels) -> Any:\n    \"\"\"Add additional levels to a factor\n\n    Args:\n        _f: A factor\n        *additional_levels: Additional levels to add to the factor.\n            Levels that already exist will be silently ignored.\n\n    Returns:\n        The factor with levels expanded\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_expand\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_explicit_na(_f, na_level=\"(Missing)\") -> Any:\n    \"\"\"Make missing values explicit\n\n    This gives missing values an explicit factor level, ensuring that they\n    appear in summaries and on plots.\n\n    Args:\n        _f: A factor\n        na_level: Level to use for missing values.\n            This is what NAs will be changed to.\n\n    Returns:\n        The factor with explict na_levels\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_explicit_na\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_drop(_f, only=None) -> Any:\n    \"\"\"Drop unused levels\n\n    Args:\n        _f: A factor\n        only: A character vector restricting the set of levels to be dropped.\n            If supplied, only levels that have no entries and appear in\n            this vector will be removed.\n\n    Returns:\n        The factor with unused levels dropped\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_drop\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_unify(\n    fs,\n    levels=None,\n) -> Any:\n    \"\"\"Unify the levels in a list of factors\n\n    Args:\n        fs: A list of factors\n        levels: Set of levels to apply to every factor. Default to union\n            of all factor levels\n\n    Returns:\n        A list of factors with the levels expanded\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_unify\", fs)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_c(*fs) -> Any:\n    \"\"\"Concatenate factors, combining levels\n\n    This is a useful ways of patching together factors from multiple sources\n    that really should have the same levels but don't.\n\n    Args:\n        *fs: factors to concatenate\n\n    Returns:\n        The concatenated factor\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_c\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_cross(\n    *fs,\n    sep: str = \":\",\n    keep_empty: bool = False,\n) -> Any:\n    \"\"\"Combine levels from two or more factors to create a new factor\n\n    Computes a factor whose levels are all the combinations of\n    the levels of the input factors.\n\n    Args:\n        *fs: factors to cross\n        sep: A string to separate levels\n        keep_empty: If True, keep combinations with no observations as levels\n\n    Returns:\n        The new factor\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_cross\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_count(_f, sort: bool = False, prop=False) -> Any:\n    \"\"\"Count entries in a factor\n\n    Args:\n        _f: A factor\n        sort: If True, sort the result so that the most common values float to\n            the top\n        prop: If True, compute the fraction of marginal table.\n\n    Returns:\n        A data frame with columns `f`, `n` and `p`, if prop is True\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_count\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_match(_f, lvls) -> Any:\n    \"\"\"Test for presence of levels in a factor\n\n    Do any of `lvls` occur in `_f`?\n\n    Args:\n        _f: A factor\n        lvls: A vector specifying levels to look for.\n\n    Returns:\n        A logical factor\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_match\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef fct_unique(_f) -> Any:\n    \"\"\"Unique values of a factor\n\n    Args:\n        _f: A factor\n\n    Returns:\n        The factor with the unique values in `_f`\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fct_unique\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lvls_reorder(\n    _f,\n    idx,\n    ordered: bool = None,\n) -> Any:\n    \"\"\"Leaves values of a factor as they are, but changes the order by\n    given indices\n\n    Args:\n        f: A factor (or character vector).\n        idx: A integer index, with one integer for each existing level.\n        new_levels: A character vector of new levels.\n        ordered: A logical which determines the \"ordered\" status of the\n          output factor. `None` preserves the existing status of the factor.\n\n    Returns:\n        The factor with levels reordered\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lvls_reorder\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lvls_revalue(\n    _f,\n    new_levels,\n) -> Any:\n    \"\"\"changes the values of existing levels; there must\n    be one new level for each old level\n\n    Args:\n        _f: A factor\n        new_levels: A character vector of new levels.\n\n    Returns:\n        The factor with the new levels\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lvls_revalue\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lvls_expand(\n    _f,\n    new_levels,\n) -> Any:\n    \"\"\"Expands the set of levels; the new levels must\n    include the old levels.\n\n    Args:\n        _f: A factor\n        new_levels: The new levels. Must include the old ones\n\n    Returns:\n        The factor with the new levels\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lvls_expand\", _f)\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef lvls_union(fs) -> Any:\n    \"\"\"Find all levels in a list of factors\n\n    Args:\n        fs: A list of factors\n\n    Returns:\n        A list of all levels\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"lvls_union\", fs)\n"
  },
  {
    "path": "datar/apis/misc.py",
    "content": "from contextlib import contextmanager\n\nfrom pipda import register_func\n\n\n@contextmanager\ndef _array_ufunc_with_backend(backend: str):\n    \"\"\"Use a backend for the operator\"\"\"\n    old_backend = array_ufunc.backend\n    array_ufunc.backend = backend\n    yield\n    array_ufunc.backend = old_backend\n\n\n@register_func(cls=object, dispatchable=\"first\")\ndef array_ufunc(x, ufunc, *args, kind, **kwargs):\n    \"\"\"Implement the array ufunc\n\n    Allow other backends to override the behavior of the ufunc on\n    different types of data.\n    \"\"\"\n    return ufunc(x, *args, **kwargs)\n\n\narray_ufunc.backend = None\narray_ufunc.with_backend = _array_ufunc_with_backend\n"
  },
  {
    "path": "datar/apis/tibble.py",
    "content": "from __future__ import annotations as _\nfrom typing import Any, Callable as _Callable\n\nfrom pipda import (\n    register_verb as _register_verb,\n    register_func as _register_func,\n)\nfrom ..core.verb_env import get_verb_ast_fallback as _get_verb_ast_fallback\n\nfrom ..core.utils import (\n    NotImplementedByCurrentBackendError as _NotImplementedByCurrentBackendError,\n)\n\n\n@_register_func(plain=True)\ndef tibble(\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    _rows: int = None,\n    _dtypes=None,\n    _drop_index: bool = False,\n    _index=None,\n    **kwargs,\n) -> Any:\n    \"\"\"Constructs a data frame\n\n    Args:\n        *args: and\n        **kwargs: A set of name-value pairs.\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n        _rows: Number of rows of a 0-col dataframe when args and kwargs are\n            not provided. When args or kwargs are provided, this is ignored.\n        _dtypes: The dtypes for each columns to convert to.\n        _drop_index: Whether drop the index for the final data frame\n        _index: The new index of the output frame\n\n    Returns:\n        A constructed tibble\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tibble\")\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef tibble_(\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    _rows: int = None,\n    _dtypes=None,\n    _drop_index: bool = False,\n    _index=None,\n    **kwargs,\n) -> Any:\n    raise _NotImplementedByCurrentBackendError(\"tibble_\")\n\n\n@_register_func(plain=True)\ndef tribble(\n    *dummies,\n    _name_repair: str | _Callable = \"minimal\",\n    _dtypes=None,\n) -> Any:\n    \"\"\"Create dataframe using an easier to read row-by-row layout\n    Unlike original API that uses formula (`f.col`) to indicate the column\n    names, we use `f.col` to indicate them.\n\n    Args:\n        *dummies: Arguments specifying the structure of a dataframe\n            Variable names should be specified with `f.name`\n        _dtypes: The dtypes for each columns to convert to.\n\n    Examples:\n        >>> tribble(\n        >>>     f.colA, f.colB,\n        >>>     \"a\",    1,\n        >>>     \"b\",    2,\n        >>>     \"c\",    3,\n        >>> )\n\n    Returns:\n        A dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tribble\")\n\n\n@_register_func(plain=True)\ndef tibble_row(\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    _dtypes=None,\n    **kwargs,\n) -> Any:\n    \"\"\"Constructs a data frame that is guaranteed to occupy one row.\n    Scalar values will be wrapped with `[]`\n    Args:\n        *args: and\n        **kwargs: A set of name-value pairs.\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n    Returns:\n        A constructed dataframe\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"tibble_row\")\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"as_tibble\"))\ndef as_tibble(df) -> Any:\n    \"\"\"Convert a DataFrame object to Tibble object\"\"\"\n    raise _NotImplementedByCurrentBackendError(\"as_tibble\", df)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"enframe\"))\ndef enframe(x, name=\"name\", value=\"value\") -> Any:\n    \"\"\"Converts mappings or lists to one- or two-column data frames.\n\n    Args:\n        x: a list, a dictionary or a dataframe with one or two columns\n        name: and\n        value: value Names of the columns that store the names and values.\n            If `None`, a one-column dataframe is returned.\n            `value` cannot be `None`\n\n    Returns:\n        A data frame with two columns if `name` is not None (default) or\n        one-column otherwise.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"enframe\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"deframe\"))\ndef deframe(x) -> Any:\n    \"\"\"Converts two-column data frames to a dictionary\n    using the first column as name and the second column as value.\n    If the input has only one column, a list.\n\n    Args:\n        x: A data frame.\n\n    Returns:\n        A dictionary or a list if only one column in the data frame.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"deframe\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"add_row\"))\ndef add_row(\n    _data,\n    *args,\n    _before=None,\n    _after=None,\n    **kwargs,\n) -> Any:\n    \"\"\"Add one or more rows of data to an existing data frame.\n\n    Aliases `add_case`\n\n    Args:\n        _data: Data frame to append to.\n        *args: and\n        **kwargs: Name-value pairs to add to the data frame.\n        _before: and\n        _after: row index where to add the new rows.\n            (default to add after the last row)\n\n    Returns:\n        The dataframe with the added rows\n\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"add_row\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"add_column\"))\ndef add_column(\n    _data,\n    *args,\n    _before=None,\n    _after=None,\n    _name_repair=\"check_unique\",\n    _dtypes=None,\n    **kwargs,\n) -> Any:\n    \"\"\"Add one or more columns to an existing data frame.\n\n    Args:\n        _data: Data frame to append to\n        *args: and\n        **kwargs: Name-value pairs to add to the data frame\n        _before: and\n        _after: Column index or name where to add the new columns\n            (default to add after the last column)\n        _dtypes: The dtypes for the new columns, either a uniform dtype or a\n            dict of dtypes with keys the column names\n\n    Returns:\n        The dataframe with the added columns\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"add_column\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"has_rownames\"))\ndef has_rownames(_data) -> bool:\n    \"\"\"Detect if a data frame has row names\n\n    Aliases `has_index`\n\n    Args:\n        _data: The data frame to check\n\n    Returns:\n        True if the data frame has index otherwise False.\n\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"has_rownames\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"remove_rownames\"))\ndef remove_rownames(_data) -> Any:\n    \"\"\"Remove the index/rownames of a data frame\n\n    Aliases `remove_index`, `drop_index`, `remove_rownames`\n\n    Args:\n        _data: The data frame\n\n    Returns:\n        The data frame with index removed\n\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"remove_rownames\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rownames_to_column\"))\ndef rownames_to_column(_data, var=\"rowname\") -> Any:\n    \"\"\"Add rownames as a column\n\n    Aliases `index_to_column`\n\n    Args:\n        _data: The data frame\n        var: The name of the column\n\n    Returns:\n        The data frame with rownames added as one column. Note that the\n        original index is removed.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rownames_to_column\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"rowid_to_column\"))\ndef rowid_to_column(_data, var=\"rowid\") -> Any:\n    \"\"\"Add rownames as a column\n\n    Args:\n        _data: The data frame\n        var: The name of the column\n\n    Returns:\n        The data frame with row ids added as one column.\n\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"rowid_to_column\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"column_to_rownames\"))\ndef column_to_rownames(_data, var=\"rowname\") -> Any:\n    \"\"\"Set rownames/index with one column, and remove it\n\n    Aliases `column_to_index`\n\n    Args:\n        _data: The data frame\n        var: The column to conver to the rownames\n\n    Returns:\n        The data frame with the column converted to rownames\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"column_to_rownames\", _data)\n\n\n# aliases\nadd_case = add_row\nhas_index = has_rownames\nremove_index = drop_index = remove_rownames\nindex_to_column = rownames_to_column\ncolumn_to_index = column_to_rownames\n"
  },
  {
    "path": "datar/apis/tidyr.py",
    "content": "from __future__ import annotations as _\nfrom typing import Any, Callable as _Callable, Mapping as _Mapping\n\nfrom pipda import (\n    register_verb as _register_verb,\n    register_func as _register_func,\n)\nfrom ..core.verb_env import get_verb_ast_fallback as _get_verb_ast_fallback\n\nfrom ..core.utils import (\n    NotImplementedByCurrentBackendError as _NotImplementedByCurrentBackendError,\n)\nfrom .base import expand_grid  # noqa: F401\n\n\n@_register_func(pipeable=True, dispatchable=True)\ndef full_seq(x, period, tol=1e-6) -> Any:\n    \"\"\"Create the full sequence of values in a vector\n\n    Args:\n        x: A numeric vector.\n        period: Gap between each observation. The existing data will be\n            checked to ensure that it is actually of this periodicity.\n        tol: Numerical tolerance for checking periodicity.\n\n    Returns:\n        The full sequence\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"full_seq\", x)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"chop\"))\ndef chop(\n    data,\n    cols=None,\n) -> Any:\n    \"\"\"Makes data frame shorter by converting rows within each group\n    into list-columns.\n\n    Args:\n        data: A data frame\n        cols: Columns to chop\n\n    Returns:\n        Data frame with selected columns chopped\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"chop\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"unchop\"))\ndef unchop(\n    data,\n    cols=None,\n    keep_empty: bool = False,\n    dtypes=None,\n) -> Any:\n    \"\"\"Makes df longer by expanding list-columns so that each element\n    of the list-column gets its own row in the output.\n\n    See https://tidyr.tidyverse.org/reference/chop.html\n\n    Recycling size-1 elements might be different from `tidyr`\n        >>> df = tibble(x=[1, [2,3]], y=[[2,3], 1])\n        >>> df >> unchop([f.x, f.y])\n        >>> # tibble(x=[1,2,3], y=[2,3,1])\n        >>> # instead of following in tidyr\n        >>> # tibble(x=[1,1,2,3], y=[2,3,1,1])\n\n    Args:\n        data: A data frame.\n        cols: Columns to unchop.\n        keep_empty: By default, you get one row of output for each element\n            of the list your unchopping/unnesting.\n            This means that if there's a size-0 element\n            (like NULL or an empty data frame), that entire row will be\n            dropped from the output.\n            If you want to preserve all rows, use `keep_empty` = `True` to\n            replace size-0 elements with a single row of missing values.\n        dtypes: Providing the dtypes for the output columns.\n            Could be a single dtype, which will be applied to all columns, or\n            a dictionary of dtypes with keys for the columns and values the\n            dtypes.\n            For nested data frames, we need to specify `col$a` as key. If `col`\n            is used as key, all columns of the nested data frames will be casted\n            into that dtype.\n\n    Returns:\n        A data frame with selected columns unchopped.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"unchop\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"nest\"))\ndef nest(\n    _data,\n    _names_sep: str = None,\n    **cols: str | int,\n) -> Any:\n    \"\"\"Nesting creates a list-column of data frames\n\n    Args:\n        _data: A data frame\n        **cols: Columns to nest\n        _names_sep: If `None`, the default, the names will be left as is.\n            Inner names will come from the former outer names\n            If a string, the inner and outer names will be used together.\n            The names of the new outer columns will be formed by pasting\n            together the outer and the inner column names, separated by\n            `_names_sep`.\n\n    Returns:\n        Nested data frame.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nest\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"unnest\"))\ndef unnest(\n    data,\n    *cols: str | int,\n    keep_empty: bool = False,\n    dtypes=None,\n    names_sep: str = None,\n    names_repair: str | _Callable = \"check_unique\",\n) -> Any:\n    \"\"\"Flattens list-column of data frames back out into regular columns.\n\n    Args:\n        data: A data frame to flatten.\n        *cols: Columns to unnest.\n        keep_empty: By default, you get one row of output for each element\n            of the list your unchopping/unnesting.\n            This means that if there's a size-0 element\n            (like NULL or an empty data frame), that entire row will be\n            dropped from the output.\n            If you want to preserve all rows, use `keep_empty` = `True` to\n            replace size-0 elements with a single row of missing values.\n        dtypes: Providing the dtypes for the output columns.\n            Could be a single dtype, which will be applied to all columns, or\n            a dictionary of dtypes with keys for the columns and values the\n            dtypes.\n        names_sep: If `None`, the default, the names will be left as is.\n            Inner names will come from the former outer names\n            If a string, the inner and outer names will be used together.\n            The names of the new outer columns will be formed by pasting\n            together the outer and the inner column names, separated by\n            `names_sep`.\n        names_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        Data frame with selected columns unnested.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"unnest\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"pack\"))\ndef pack(\n    _data,\n    _names_sep: str = None,\n    **cols: str | int,\n) -> Any:\n    \"\"\"Makes df narrow by collapsing a set of columns into a single df-column.\n\n    Args:\n        _data: A data frame\n        **cols: Columns to pack\n        _names_sep: If `None`, the default, the names will be left as is.\n            Inner names will come from the former outer names\n            If a string, the inner and outer names will be used together.\n            The names of the new outer columns will be formed by pasting\n            together the outer and the inner column names, separated by\n            `_names_sep`.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pack\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"unpack\"))\ndef unpack(\n    data,\n    cols,\n    names_sep: str = None,\n    names_repair: str | _Callable = \"check_unique\",\n) -> Any:\n    \"\"\"Makes df wider by expanding df-columns back out into individual columns.\n\n    For empty columns, the column is kept asis, instead of removing it.\n\n    Args:\n        data: A data frame\n        cols: Columns to unpack\n        names_sep: If `None`, the default, the names will be left as is.\n            Inner names will come from the former outer names\n            If a string, the inner and outer names will be used together.\n            The names of the new outer columns will be formed by pasting\n            together the outer and the inner column names, separated by\n            `_names_sep`.\n        name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        Data frame with given columns unpacked.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"unpack\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"expand\"))\ndef expand(\n    data,\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    **kwargs,\n) -> Any:\n    \"\"\"Generates all combination of variables found in a dataset.\n\n    Args:\n        data: A data frame\n        *args: and,\n        **kwargs: columns to expand. Columns can be atomic lists.\n            - To find all unique combinations of x, y and z, including\n              those not present in the data, supply each variable as a\n              separate argument: `expand(df, x, y, z)`.\n            - To find only the combinations that occur in the data, use\n              nesting: `expand(df, nesting(x, y, z))`.\n            - You can combine the two forms. For example,\n              `expand(df, nesting(school_id, student_id), date)` would\n              produce a row for each present school-student combination\n              for all possible dates.\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        A data frame with all combination of variables.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"expand\", data)\n\n\n@_register_func(dispatchable=True)\ndef nesting(\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    **kwargs,\n) -> Any:\n    \"\"\"A helper that only finds combinations already present in the data.\n\n    Args:\n        *args: and,\n        **kwargs: columns to expand. Columns can be atomic lists.\n            - To find all unique combinations of x, y and z, including\n              those not present in the data, supply each variable as a\n              separate argument: `expand(df, x, y, z)`.\n            - To find only the combinations that occur in the data, use\n              nesting: `expand(df, nesting(x, y, z))`.\n            - You can combine the two forms. For example,\n              `expand(df, nesting(school_id, student_id), date)` would\n              produce a row for each present school-student combination\n              for all possible dates.\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        A data frame with all combinations in data.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"nesting\")\n\n\n@_register_func(dispatchable=True)\ndef crossing(\n    *args,\n    _name_repair: str | _Callable = \"check_unique\",\n    **kwargs,\n) -> Any:\n    \"\"\"A wrapper around `expand_grid()` that de-duplicates and sorts its inputs\n\n    When values are not specified by literal `list`, they will be sorted.\n\n    Args:\n        *args: and,\n        **kwargs: columns to expand. Columns can be atomic lists.\n            - To find all unique combinations of x, y and z, including\n              those not present in the data, supply each variable as a\n              separate argument: `expand(df, x, y, z)`.\n            - To find only the combinations that occur in the data, use\n              nesting: `expand(df, nesting(x, y, z))`.\n            - You can combine the two forms. For example,\n              `expand(df, nesting(school_id, student_id), date)` would\n              produce a row for each present school-student combination\n              for all possible dates.\n        _name_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        A data frame with values deduplicated and sorted.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"crossing\")\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"complete\"))\ndef complete(\n    data,\n    *args,\n    fill=None,\n    explict: bool = True,\n) -> Any:\n    \"\"\"Turns implicit missing values into explicit missing values.\n\n    Args:\n        data: A data frame\n        *args: columns to expand. Columns can be atomic lists.\n            - To find all unique combinations of x, y and z, including\n              those not present in the data, supply each variable as a\n              separate argument: `expand(df, x, y, z)`.\n            - To find only the combinations that occur in the data, use\n              nesting: `expand(df, nesting(x, y, z))`.\n            - You can combine the two forms. For example,\n              `expand(df, nesting(school_id, student_id), date)` would\n              produce a row for each present school-student combination\n              for all possible dates.\n        fill: A named list that for each variable supplies a single value\n            to use instead of NA for missing combinations.\n        explict: Should both implicit (newly created) and explicit\n            (pre-existing) missing values be filled by fill? By default,\n            this is TRUE, but if set to FALSE this will limit the fill to only\n            implicit missing values.\n\n    Returns:\n        Data frame with missing values completed\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"complete\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"drop_na\"))\ndef drop_na(\n    _data,\n    *columns: str,\n    _how: str = \"any\",\n) -> Any:\n    \"\"\"Drop rows containing missing values\n\n    See https://tidyr.tidyverse.org/reference/drop_na.html\n\n    Args:\n        data: A data frame.\n        *columns: Columns to inspect for missing values.\n        _how: How to select the rows to drop\n            - all: All columns of `columns` to be `NA`s\n            - any: Any columns of `columns` to be `NA`s\n            (tidyr doesn't support this argument)\n\n    Returns:\n        Dataframe with rows with NAs dropped and indexes dropped\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"drop_na\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"extract\"))\ndef extract(\n    data,\n    col: str | int,\n    into,\n    regex: str = r\"(\\w+)\",\n    remove: bool = True,\n    convert=False,\n) -> Any:\n    \"\"\"Given a regular expression with capturing groups, extract() turns each\n    group into a new column. If the groups don't match, or the input is NA,\n    the output will be NA.\n\n    See https://tidyr.tidyverse.org/reference/extract.html\n\n    Args:\n        data: The dataframe\n        col: Column name or position.\n        into: Names of new variables to create as character vector.\n            Use None to omit the variable in the output.\n        regex: a regular expression used to extract the desired values.\n            There should be one group (defined by ()) for each element of into.\n        remove: If TRUE, remove input column from output data frame.\n        convert: The universal type for the extracted columns or a dict for\n            individual ones\n\n    Returns:\n        Dataframe with extracted columns.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"extract\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"fill\"))\ndef fill(\n    _data,\n    *columns: str | int,\n    _direction: str = \"down\",\n) -> Any:\n    \"\"\"Fills missing values in selected columns using the next or\n    previous entry.\n\n    See https://tidyr.tidyverse.org/reference/fill.html\n\n    Args:\n        _data: A dataframe\n        *columns: Columns to fill\n        _direction: Direction in which to fill missing values.\n            Currently either \"down\" (the default), \"up\",\n            \"downup\" (i.e. first down and then up) or\n            \"updown\" (first up and then down).\n\n    Returns:\n        The dataframe with NAs being replaced.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"fill\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"pivot_longer\"))\ndef pivot_longer(\n    _data,\n    cols,\n    names_to=\"name\",\n    names_prefix: str = None,\n    names_sep: str = None,\n    names_pattern: str = None,\n    names_dtypes=None,\n    names_transform: _Callable | _Mapping[str, _Callable] = None,\n    names_repair=\"check_unique\",\n    values_to: str = \"value\",\n    values_drop_na: bool = False,\n    values_dtypes=None,\n    values_transform: _Callable | _Mapping[str, _Callable] = None,\n) -> Any:\n    \"\"\" \"lengthens\" data, increasing the number of rows and\n    decreasing the number of columns.\n\n    The row order is a bit different from `tidyr` and `pandas.DataFrame.melt`.\n        >>> df = tibble(x=c[1:2], y=c[3:4])\n        >>> pivot_longer(df, f[f.x:f.y])\n        >>> #    name   value\n        >>> # 0  x      1\n        >>> # 1  x      2\n        >>> # 2  y      3\n        >>> # 3  y      4\n    But with `tidyr::pivot_longer`, the output will be:\n        >>> # # A tibble: 4 x 2\n        >>> # name  value\n        >>> # <chr> <int>\n        >>> # 1 x   1\n        >>> # 2 y   3\n        >>> # 3 x   2\n        >>> # 4 y   4\n\n    Args:\n        _data: A data frame to pivot.\n        cols: Columns to pivot into longer format.\n        names_to: A string specifying the name of the column to create from\n            the data stored in the column names of data.\n            Can be a character vector, creating multiple columns, if names_sep\n            or names_pattern is provided. In this case, there are two special\n            values you can take advantage of:\n            - `None`/`NA`/`NULL` will discard that component of the name.\n            - `.value`/`_value` indicates that component of the name defines\n                the name of the column containing the cell values,\n                overriding values_to.\n            - Different as `tidyr`: With `.value`/`_value`, if there are other\n              parts of the names to distinguish the groups, they must be\n              captured. For example, use `r'(\\\\w)_(\\\\d)'` to match `'a_1'` and\n              `['.value', NA]` to discard the suffix, instead of use\n              `r'(\\\\w)_\\\\d'` to match.\n        names_prefix: A regular expression used to remove matching text from\n            the start of each variable name.\n        names_sep: and\n        names_pattern: If names_to contains multiple values,\n            these arguments control how the column name is broken up.\n            names_sep takes the same specification as separate(), and\n            can either be a numeric vector (specifying positions to break on),\n            or a single string (specifying a regular expression to split on).\n        names_pattern: takes the same specification as extract(),\n            a regular expression containing matching groups (()).\n        names_dtypes: and\n        values_dtypes: A list of column name-prototype pairs.\n            A prototype (or dtypes for short) is a zero-length vector\n            (like integer() or numeric()) that defines the type, class, and\n            attributes of a vector. Use these arguments if you want to confirm\n            that the created columns are the types that you expect.\n            Note that if you want to change (instead of confirm) the types\n            of specific columns, you should use names_transform or\n            values_transform instead.\n        names_transform: and\n        values_transform: A list of column name-function pairs.\n            Use these arguments if you need to change the types of\n            specific columns. For example,\n            names_transform = dict(week = as.integer) would convert a\n            character variable called week to an integer.\n            If not specified, the type of the columns generated from names_to\n            will be character, and the type of the variables generated from\n            values_to will be the common type of the input columns used to\n            generate them.\n        names_repair: Not supported yet.\n        values_to: A string specifying the name of the column to create from\n            the data stored in cell values. If names_to is a character\n            containing the special `.value`/`_value` sentinel, this value\n            will be ignored, and the name of the value column will be derived\n            from part of the existing column names.\n        values_drop_na: If TRUE, will drop rows that contain only NAs in\n            the value_to column. This effectively converts explicit missing\n            values to implicit missing values, and should generally be used\n            only when missing values in data were created by its structure.\n        names_repair: treatment of problematic column names:\n            - \"minimal\": No name repair or checks, beyond basic existence,\n            - \"unique\": Make sure names are unique and not empty,\n            - \"check_unique\": (default value), no name repair,\n                but check they are unique,\n            - \"universal\": Make the names unique and syntactic\n            - a function: apply custom name repair\n\n    Returns:\n        The pivoted dataframe.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pivot_longer\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"pivot_wider\"))\ndef pivot_wider(\n    _data,\n    id_cols=None,\n    names_from=\"name\",\n    names_prefix: str = \"\",\n    names_sep: str = \"_\",\n    names_glue: str = None,\n    names_sort: bool = False,\n    # names_repair: str = \"check_unique\", # todo\n    values_from=\"value\",\n    values_fill=None,\n    values_fn: _Callable | _Mapping[str, _Callable] = None,\n) -> Any:\n    \"\"\" \"widens\" data, increasing the number of columns and decreasing\n    the number of rows.\n\n    Args:\n        _data: A data frame to pivot.\n        id_cols: A set of columns that uniquely identifies each observation.\n            Defaults to all columns in data except for the columns specified\n            in names_from and values_from.\n        names_from: and\n        values_from: A pair of arguments describing which column\n            (or columns) to get the name of the output column (names_from),\n            and which column (or columns) to get the cell values from\n            (values_from).\n        names_prefix: String added to the start of every variable name.\n        names_sep: If names_from or values_from contains multiple variables,\n            this will be used to join their values together into a single\n            string to use as a column name.\n        names_glue: Instead of names_sep and names_prefix, you can supply\n            a glue specification that uses the names_from columns\n            (and special _value) to create custom column names.\n        names_sort: Should the column names be sorted? If FALSE, the default,\n            column names are ordered by first appearance.\n        names_repair: todo\n        values_fill: Optionally, a (scalar) value that specifies what\n            each value should be filled in with when missing.\n        values_fn: Optionally, a function applied to the value in each cell\n            in the output. You will typically use this when the combination\n            of `id_cols` and value column does not uniquely identify\n            an observation.\n            This can be a dict you want to apply different aggregations to\n            different value columns.\n            If not specified, will be `numpy.mean`\n\n    Returns:\n        The pivoted dataframe.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"pivot_wider\", _data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"separate\"))\ndef separate(\n    data,\n    col: int | str,\n    into,\n    sep: int | str = r\"[^0-9A-Za-z]+\",\n    remove: bool = True,\n    convert=False,\n    extra: str = \"warn\",\n    fill: str = \"warn\",\n) -> Any:\n    \"\"\"Given either a regular expression or a vector of character positions,\n    turns a single character column into multiple columns.\n\n    Args:\n        data: The dataframe\n        col: Column name or position.\n        into: Names of new variables to create as character vector.\n            Use `None`/`NA`/`NULL` to omit the variable in the output.\n        sep: Separator between columns.\n            If str, `sep` is interpreted as a regular expression.\n            The default value is a regular expression that matches\n            any sequence of non-alphanumeric values.\n            If int, `sep` is interpreted as character positions to split at.\n        remove: If TRUE, remove input column from output data frame.\n        convert: The universal type for the extracted columns or a dict for\n            individual ones\n            Note that when given `TRUE`, `DataFrame.convert_dtypes()` is called,\n            but it will not convert `str` to other types\n            (For example, `'1'` to `1`). You have to specify the dtype yourself.\n        extra: If sep is a character vector, this controls what happens when\n            there are too many pieces. There are three valid options:\n            - \"warn\" (the default): emit a warning and drop extra values.\n            - \"drop\": drop any extra values without a warning.\n            - \"merge\": only splits at most length(into) times\n        fill: If sep is a character vector, this controls what happens when\n            there are not enough pieces. There are three valid options:\n            - \"warn\" (the default): emit a warning and fill from the right\n            - \"right\": fill with missing values on the right\n            - \"left\": fill with missing values on the left\n\n    Returns:\n        Dataframe with separated columns.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"separate\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"separate_rows\"))\ndef separate_rows(\n    data,\n    *columns: str,\n    sep: str = r\"[^0-9A-Za-z]+\",\n    convert=False,\n) -> Any:\n    \"\"\"Separates the values and places each one in its own row.\n\n    Args:\n        data: The dataframe\n        *columns: The columns to separate on\n        sep: Separator between columns.\n        convert: The universal type for the extracted columns or a dict for\n            individual ones\n\n    Returns:\n        Dataframe with rows separated and repeated.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"separate_rows\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"uncount\"))\ndef uncount(\n    data,\n    weights,\n    _remove: bool = True,\n    _id: str = None,\n) -> Any:\n    \"\"\"Duplicating rows according to a weighting variable\n\n    Args:\n        data: A data frame\n        weights: A vector of weights. Evaluated in the context of data\n        _remove: If TRUE, and weights is the name of a column in data,\n            then this column is removed.\n        _id: Supply a string to create a new variable which gives a\n            unique identifier for each created row (0-based).\n\n    Returns:\n        dataframe with rows repeated.\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"uncount\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"unite\"))\ndef unite(\n    data,\n    col: str,\n    *columns: str | int,\n    sep: str = \"_\",\n    remove: bool = True,\n    na_rm: bool = True,\n) -> Any:\n    \"\"\"Unite multiple columns into one by pasting strings together\n\n    Args:\n        data: A data frame.\n        col: The name of the new column, as a string or symbol.\n        *columns: Columns to unite\n        sep: Separator to use between values.\n        remove: If True, remove input columns from output data frame.\n        na_rm: If True, missing values will be remove prior to uniting\n            each value.\n\n    Returns:\n        The dataframe with selected columns united\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"unite\", data)\n\n\n@_register_verb(ast_fallback=_get_verb_ast_fallback(\"replace_na\"))\ndef replace_na(\n    data,\n    data_or_replace=None,\n    replace=None,\n) -> Any:\n    \"\"\"Replace NA with a value\n\n    This function can be also used not as a verb. As a function called as\n    an argument in a verb, data is passed implicitly. Then one could\n    pass data_or_replace as the data to replace.\n\n    Args:\n        data: The data piped in\n        data_or_replace: When called as argument of a verb, this is the\n            data to replace. Otherwise this is the replacement.\n        replace: The value to replace with\n            Can only be a scalar or dict for data frame.\n            So replace NA with a list is not supported yet.\n\n    Returns:\n        Corresponding data with NAs replaced\n    \"\"\"\n    raise _NotImplementedByCurrentBackendError(\"replace_na\", data)\n"
  },
  {
    "path": "datar/base.py",
    "content": "\nfrom .core.load_plugins import plugin as _plugin\nfrom .apis.base import *\n\nlocals().update(_plugin.hooks.base_api())\n__all__ = [key for key in locals() if not key.startswith(\"_\")]\n_conflict_names = {\"min\", \"max\", \"sum\", \"abs\", \"round\", \"all\", \"any\", \"re\"}\n\nif get_option(\"allow_conflict_names\"):  # noqa: F405\n    __all__.extend(_conflict_names)\n    for name in _conflict_names:\n        locals()[name] = locals()[name + \"_\"]\n\n\ndef __getattr__(name):\n    \"\"\"Even when allow_conflict_names is False, datar.base.sum should be fine\n    \"\"\"\n    if name in _conflict_names:\n        import sys\n        import ast\n        from executing import Source\n        node = Source.executing(sys._getframe(1)).node\n        if isinstance(node, (ast.Call, ast.Attribute)):\n            # import datar.base as d\n            # d.sum(...)\n            return globals()[name + \"_\"]\n\n    raise AttributeError\n"
  },
  {
    "path": "datar/core/__init__.py",
    "content": ""
  },
  {
    "path": "datar/core/defaults.py",
    "content": "from pathlib import Path\n\nfrom pipda import Symbolic\n\nf = Symbolic()\n\nOPTION_FILE_HOME = Path(\"~/.datar.toml\").expanduser()\nOPTION_FILE_CWD = Path(\"./.datar.toml\").resolve()\n"
  },
  {
    "path": "datar/core/load_plugins.py",
    "content": "from pipda import register_array_ufunc\n\nfrom .options import get_option\nfrom .plugin import plugin\n\n\ndef _array_ufunc_to_register(ufunc, x, *args, kind, **kwargs):\n    \"\"\"Register the array ufunc to pipda\"\"\"\n    from ..apis.misc import array_ufunc\n\n    return array_ufunc(\n        x,\n        ufunc,\n        *args,\n        kind=kind,\n        **kwargs,\n        __backend=array_ufunc.backend,\n    )\n\n\nplugin.load_entrypoints(only=get_option(\"backends\"))\n\nplugin.hooks.setup()\nregister_array_ufunc(_array_ufunc_to_register)\n"
  },
  {
    "path": "datar/core/names.py",
    "content": "\"\"\"Name repairing\"\"\"\nimport inspect\nimport re\nimport keyword\nimport math\nfrom numbers import Number\nfrom typing import Any, Callable, List, Union, Iterable, Tuple\n\nfrom .utils import logger\n\n\nclass NameNonUniqueError(ValueError):\n    \"\"\"Error for non-unique names\"\"\"\n\n\ndef _isnan(x: Any) -> bool:\n    \"\"\"Check if x is nan\"\"\"\n    return isinstance(x, Number) and math.isnan(x)\n\n\ndef _is_scalar(x: Any) -> bool:\n    \"\"\"Check if x is scalar\"\"\"\n    if isinstance(x, str):  # pragma: no cover\n        return True\n    try:\n        iter(x)\n    except TypeError:\n        return True\n    return False\n\n\ndef _log_changed_names(changed_names: List[Tuple[str, str]]) -> None:\n    \"\"\"Log the changed names\"\"\"\n    if not changed_names:\n        return\n\n    logger.warning(\"New names:\")\n    for orig_name, new_name in changed_names:\n        logger.warning(\"* %r -> %r\", orig_name, new_name)\n\n\ndef _repair_names_minimal(names: Iterable[str]) -> List[str]:\n    \"\"\"Minimal repairing\"\"\"\n    return [\"\" if name is None or _isnan(name) else str(name) for name in names]\n\n\ndef _repair_names_unique(\n    names: Iterable[str],\n    quiet: bool = False,\n    sanitizer: Callable = None,\n) -> List[str]:\n    \"\"\"Make sure names are unique\"\"\"\n    min_names = _repair_names_minimal(names)\n    neat_names = [\n        re.sub(r\"(?:(?<!_)_{1,2}\\d+|(?<!_)__)+$\", \"\", name)\n        for name in min_names\n    ]\n    if callable(sanitizer):\n        neat_names = [sanitizer(name) for name in neat_names]\n\n    new_names = []\n    changed_names = []\n    for i, name in enumerate(names):\n        neat_name = neat_names[i]\n        if neat_names.count(neat_name) > 1 or neat_name == \"\":\n            neat_name = f\"{neat_name}__{i}\"\n        if neat_name != name:\n            changed_names.append((name, neat_name))\n        new_names.append(neat_name)\n    if not quiet:\n        _log_changed_names(changed_names)\n    return new_names\n\n\ndef _repair_names_universal(\n    names: Iterable[str],\n    quiet: bool = False,\n) -> List[str]:\n    \"\"\"Make sure names are safely to be used as variable or attribute\"\"\"\n    min_names = _repair_names_minimal(names)\n    neat_names = [re.sub(r\"[^\\w]\", \"_\", name) for name in min_names]\n    new_names = _repair_names_unique(\n        neat_names,\n        quiet=True,\n        sanitizer=lambda name: (\n            f\"_{name}\"\n            if keyword.iskeyword(name) or (name and name[0].isdigit())\n            else name\n        ),\n    )\n    if not quiet:\n        changed_names = [\n            (orig_name, new_name)\n            for orig_name, new_name in zip(names, new_names)\n            if orig_name != new_name\n        ]\n        _log_changed_names(changed_names)\n    return new_names\n\n\ndef _repair_names_check_unique(names: Iterable[str]) -> Iterable[str]:\n    \"\"\"Just check the uniqueness\"\"\"\n    for name in names:\n        if names.count(name) > 1:\n            raise NameNonUniqueError(f\"Names must be unique: {name}\")\n        if name == \"\" or _isnan(name):\n            raise NameNonUniqueError(f\"Names can't be empty: {name}\")\n        if re.search(r\"(?:(?<!_)_{2}\\d+|(?<!_)__)+$\", str(name)):\n            raise NameNonUniqueError(\n                f\"Names can't be of the form `__` or `_j`: {name}\"\n            )\n    return names\n\n\nBUILTIN_REPAIR_METHODS = dict(\n    minimal=_repair_names_minimal,\n    unique=_repair_names_unique,\n    universal=_repair_names_universal,\n    check_unique=_repair_names_check_unique,\n)\n\n\ndef repair_names(\n    names: Iterable[str],\n    repair: Union[str, Callable],\n) -> List[str]:\n    \"\"\"Repair names based on the method\n\n    Args:\n        names: The names to be repaired\n        repair: The method to repair\n            - `minimal`: Minimal names are never None or NA.\n                When an element doesn't have a name, its minimal name\n                is an empty string.\n            - `unique`: Unique names are unique. A suffix is appended to\n                duplicate names to make them unique.\n            - `universal`: Universal names are unique and syntactic,\n                meaning that you can safely use the names as variables without\n                causing a syntax error (like `f.<name>`).\n            - A function, accepts either a list of names or a single name.\n                Function accepts a list of names must annotate the first\n                argument with `typing.Iterable` or `typing.Sequence`.\n\n    Examples:\n        >>> repair_names([None]*3, repair=\"minimal\")\n        >>> # [\"\", \"\", \"\"]\n        >>> repair_names([\"x\", NA], repair=\"minimal\")\n        >>> # [\"x\", \"\"]\n        >>> repair_names([\"\", \"x\", \"\", \"y\", \"x\", \"_2\", \"__\"], repair=\"unique\")\n        >>> # [\"__1\", \"x__2\", \"__3\", \"y\", \"x__5\", \"__6\", \"__7\"]\n        >>> repair_names([\"\", \"x\", NA, \"x\"], repair=\"universal\")\n        >>> # [\"__1\", \"x__2\", \"__3\", \"x__4\"]\n        >>> repair_names([\"(y)\"  \"_z\"  \".2fa\"  \"False\"], repair=\"universal\")\n        >>> # [\"_y_\", \"_z\", \"_2fa\", \"_False\"]\n\n    Returns:\n        The repaired names\n\n    Raises:\n        ValueError: when repair is not a string or callable\n        NameNonUniqueError: when check_unique fails\n    \"\"\"\n    if isinstance(repair, str):\n        repair = BUILTIN_REPAIR_METHODS[repair]  # type: ignore\n    elif (\n        not _is_scalar(repair)\n        and all(isinstance(elem, str) for elem in repair)\n    ):\n        return repair  # type: ignore\n    elif not callable(repair):\n        raise ValueError(\"Expect a function for name repairing.\")\n\n    parameters = inspect.signature(repair).parameters  # type: ignore\n    annotation = list(parameters.values())[0].annotation\n    if annotation is inspect._empty or annotation._name not in (\n        \"Iterable\",\n        \"Sequence\",\n    ):  # scalar input\n        return [repair(name) for name in names]\n\n    return repair(names)\n"
  },
  {
    "path": "datar/core/operator.py",
    "content": "\"\"\"Operators for datar\"\"\"\nfrom typing import Callable\nfrom contextlib import contextmanager\n\nfrom pipda import register_operator, Operator\n\n\n@register_operator\nclass DatarOperator(Operator):\n    \"\"\"Operator class for datar\"\"\"\n\n    backend = None\n\n    @classmethod\n    @contextmanager\n    def with_backend(cls, backend: str):\n        \"\"\"Use a backend for the operator\"\"\"\n        old_backend = cls.backend\n        cls.backend = backend\n        yield\n        cls.backend = old_backend\n\n    def __getattr__(self, name: str) -> Callable:\n        from .plugin import plugin\n        return lambda x, y=None: plugin.hooks.operate(\n            name,\n            x,\n            y,\n            __plugin=self.__class__.backend,\n        )\n"
  },
  {
    "path": "datar/core/options.py",
    "content": "\"\"\"Provide options\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any, Generator, Mapping\nfrom contextlib import contextmanager\n\nfrom diot import Diot\nfrom simpleconf import Config\n\nfrom .defaults import OPTION_FILE_CWD, OPTION_FILE_HOME\n\n_key_transform = lambda key: key.replace(\"_\", \".\")\n_dict_transform_back = lambda dic: {\n    key.replace(\".\", \"_\"): val for key, val in dic.items()\n}\n\nOPTIONS = Diot(\n    Config.load(\n        {\n            # Do we allow to use conflict names directly?\n            \"allow_conflict_names\": False,\n            # Disable some installed backends\n            \"backends\": [],\n        },\n        OPTION_FILE_HOME,\n        OPTION_FILE_CWD,\n        ignore_nonexist=True,\n    ),\n    diot_transform=_key_transform,\n)\n\n\ndef options(\n    *args: str | Mapping[str, Any],\n    _return: bool = None,\n    **kwargs: Any,\n) -> Mapping[str, Any]:\n    \"\"\"Allow the user to set and examine a variety of global options\n\n    Args:\n        *args: Names of options to return\n        **kwargs: name-value pair to create/set an option\n        _return: Whether return the options.\n            If `None`, turned to `True` when option names provided in `args`.\n\n    Returns:\n        The options before updating if `_return` is `True`.\n    \"\"\"\n    if not args and not kwargs and (_return is None or _return is True):\n        # Make sure the options won't be changed\n        return OPTIONS.copy()\n\n    names = [arg.replace(\".\", \"_\") for arg in args if isinstance(arg, str)]\n    pairs = {}\n    for arg in args:\n        if isinstance(arg, dict):\n            pairs.update(_dict_transform_back(arg))\n    pairs.update(_dict_transform_back(kwargs))\n\n    out = None\n    if _return is None:\n        _return = names\n\n    if _return:\n        out = Diot(\n            {\n                name: value\n                for name, value in OPTIONS.items()\n                if name in names or name in pairs\n            },\n            diot_transform=_key_transform,\n        )\n\n    for key, val in pairs.items():\n        oldval = OPTIONS[key]\n        if oldval == val:\n            continue\n        OPTIONS[key] = val\n\n    return out\n\n\n@contextmanager\ndef options_context(**kwargs: Any) -> Generator:\n    \"\"\"A context manager to execute code with temporary options\n\n    Note that this is not thread-safe.\n    \"\"\"\n    opts = options()  # type: Mapping[str, Any]\n    options(**kwargs)\n    yield\n    options(opts)\n\n\ndef get_option(x: str, default: Any = None) -> Any:\n    \"\"\"Get the current value set for option `x`,\n    or `default` (which defaults to `NULL`) if the option is unset.\n\n    Args:\n        x: The name of the option\n        default: The default value if `x` is unset\n    \"\"\"\n    return OPTIONS.get(x, default)\n\n\ndef add_option(x: str, default: Any = None) -> None:\n    \"\"\"Add an option\n\n    Args:\n        x: The name of the option\n        default: The default value if `x` is unset\n    \"\"\"\n    OPTIONS.setdefault(x, default)\n"
  },
  {
    "path": "datar/core/plugin.py",
    "content": "\"\"\"Plugin system to support different backends\"\"\"\nfrom typing import Any, List, Mapping, Tuple, Callable\n\nfrom simplug import Simplug, SimplugResult, makecall\n\nplugin = Simplug(\"datar\")\n\n\ndef _collect(calls: List[Tuple[Callable, Tuple, Mapping]]) -> Mapping[str, Any]:\n    \"\"\"Collect the results from plugins\"\"\"\n    collected = {}\n    for call in calls:\n        out = makecall(call)\n        if out is not None:\n            collected.update(out)\n    return collected\n\n\n@plugin.spec\ndef setup():\n    \"\"\"Initialize the backend\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef get_versions():\n    \"\"\"Return the versions of the dependencies of the plugin.\"\"\"\n\n\n@plugin.spec(result=SimplugResult.TRY_SINGLE)\ndef load_dataset(name: str, metadata: Mapping):\n    \"\"\"Implementations for load_dataset()\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef base_api():\n    \"\"\"What is implemented the base APIs.\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef dplyr_api():\n    \"\"\"What is implemented the dplyr APIs.\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef tibble_api():\n    \"\"\"What is implemented the tibble APIs.\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef forcats_api():\n    \"\"\"What is implemented the forcats APIs.\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef tidyr_api():\n    \"\"\"What is implemented the tidyr APIs.\"\"\"\n\n\n@plugin.spec(result=_collect)\ndef misc_api():\n    \"\"\"What is implemented the misc APIs.\"\"\"\n\n\n@plugin.spec(result=SimplugResult.SINGLE)\ndef c_getitem(item):\n    \"\"\"Get item for c\"\"\"\n\n\n@plugin.spec(result=SimplugResult.SINGLE)\ndef operate(op: str, x: Any, y: Any = None):\n    \"\"\"Operate on x and y\"\"\"\n"
  },
  {
    "path": "datar/core/utils.py",
    "content": "\"\"\"Utilities for datar\"\"\"\nimport sys\nimport logging\nfrom typing import Any, Callable\nfrom contextlib import contextmanager\n\nfrom .plugin import plugin\n\n# logger\nlogger = logging.getLogger(\"datar\")\nlogger.setLevel(logging.INFO)\nstream_handler = logging.StreamHandler(sys.stderr)\nstream_handler.setFormatter(\n    logging.Formatter(\n        \"[%(asctime)s][%(name)s][%(levelname)7s] %(message)s\",\n        datefmt=\"%Y-%m-%d %H:%M:%S\",\n    )\n)\nlogger.addHandler(stream_handler)\n\n\nclass NotImplementedByCurrentBackendError(NotImplementedError):\n    \"\"\"Raised when a function is not implemented by the current backend\"\"\"\n\n    def __init__(self, func: str, data: Any = None) -> None:\n        data_msg = \"\"\n        if data is not None:\n            data_msg = f\"data type: {type(data).__name__}, \"\n        msg = (\n            f\"'{func}' \"\n            f\"({data_msg}backends: \"\n            f\"{', '.join(plugin.get_enabled_plugin_names())})\"\n        )\n        super().__init__(msg)\n\n\nclass CollectionFunction:\n    \"\"\"Enables c[1:3] to be interpreted as 1:3\"\"\"\n\n    def __init__(self, c_func: Callable) -> None:\n        self.c = c_func\n        self.backend = None\n\n    def __call__(self, *args, **kwargs):\n        kwargs[\"__ast_fallback\"] = \"normal\"\n        return self.c(*args, **kwargs)\n\n    @contextmanager\n    def with_backend(self, backend: str):\n        \"\"\"Set the backend for c[]\"\"\"\n        _backend = self.backend\n        self.backend = backend\n        yield\n        self.backend = _backend\n\n    def __getitem__(self, item):\n        \"\"\"Allow c[1:3] to be interpreted as 1:3\"\"\"\n        return plugin.hooks.c_getitem(item, __plugin=self.backend)\n\n\ndef arg_match(arg, argname, values, errmsg=None):\n    \"\"\"Make sure arg is in one of the values.\n\n    Mimics `rlang::arg_match`.\n    \"\"\"\n    if not errmsg:\n        values = list(values)\n        errmsg = f\"`{argname}` must be one of {values}.\"\n    if arg not in values:\n        raise ValueError(errmsg)\n    return arg\n"
  },
  {
    "path": "datar/core/verb_env.py",
    "content": "\"\"\"Utilities for getting verb AST fallback from environment variables\"\"\"\nfrom __future__ import annotations\n\nimport os\n\n\ndef get_verb_ast_fallback(verb: str) -> str | None:\n    \"\"\"Get ast_fallback value from environment variables.\n\n    Checks for per-verb environment variable first, then falls back to global.\n\n    Args:\n        verb: The name of the verb (e.g., \"mutate\", \"select\", \"filter\")\n\n    Returns:\n        The ast_fallback value from environment variables, or None if not set\n\n    Example:\n        >>> @register_verb(ast_fallback=get_verb_ast_fallback(\"mutate\"))\n        >>> def mutate(...):\n        ...     pass\n    \"\"\"\n    # Convert verb name to uppercase, removing trailing underscore if present\n    # e.g., \"select\" -> \"SELECT\", \"filter_\" -> \"FILTER\"\n    verb_name = verb.rstrip(\"_\").upper()\n\n    # Check for per-verb environment variable first\n    # e.g., DATAR_MUTATE_AST_FALLBACK\n    per_verb_key = f\"DATAR_{verb_name}_AST_FALLBACK\"\n    per_verb_value = os.environ.get(per_verb_key)\n    if per_verb_value:\n        return per_verb_value\n\n    # Fall back to global environment variable\n    global_key = \"DATAR_VERB_AST_FALLBACK\"\n    global_value = os.environ.get(global_key)\n    if global_value:\n        return global_value\n\n    return None\n"
  },
  {
    "path": "datar/data/__init__.py",
    "content": "\"\"\"Collects datasets from R-datasets, dplyr and tidyr packages\"\"\"\nimport functools\nfrom typing import Any, List\n\nfrom ..core.load_plugins import plugin\nfrom .metadata import Metadata, metadata\n\n\n# Should never do `from datar.data import *`\n__all__ = []  # type: List[str]\n\n\ndef descr_datasets(*names: str):\n    \"\"\"Get the information of the given datasets\n\n    Args:\n        *names: Names of the datasets to get the information of.\n    \"\"\"\n    return {\n        key: val\n        for key, val in metadata.items()\n        if key in names or not names\n    }\n\n\ndef add_dataset(name: str, meta: Metadata):\n    \"\"\"Add a dataset to the registry\n\n    Args:\n        name: The name of the dataset\n        metadata: The metadata of the dataset\n    \"\"\"\n    metadata[name] = meta\n\n\n@functools.lru_cache()\ndef load_dataset(name: str, __backend: str = None) -> Any:\n    \"\"\"Load the specific dataset\"\"\"\n    loaded = plugin.hooks.load_dataset(name, metadata, __plugin=__backend)\n    if loaded is None:\n        from ..core.utils import NotImplementedByCurrentBackendError\n        raise NotImplementedByCurrentBackendError(f\"loading dataset '{name}'\")\n\n    return loaded\n\n\ndef __getattr__(name: str):\n    # mkapi accesses quite a lot of attributes starting with _\n    if not name.isidentifier() or name.startswith(\"__\"):  # pragma: no cover\n        raise AttributeError(name)\n\n    return load_dataset(name.lower())\n"
  },
  {
    "path": "datar/data/metadata.py",
    "content": "from collections import namedtuple\nfrom pathlib import Path\n\nHERE = Path(__file__).parent\n\nMetadata = namedtuple('Metadata', ['descr', 'ref', 'index', 'source'])\n\nmetadata = dict(\n    airlines=Metadata(\n        descr=\"Translation between two letter carrier codes and names\",\n        ref=\"https://github.com/tidyverse/nycflights13\",\n        index=False,\n        source=HERE / \"airlines.csv.gz\",\n    ),\n    airports=Metadata(\n        descr=\"airport names and locations\",\n        ref=\"https://github.com/tidyverse/nycflights13\",\n        index=False,\n        source=HERE / \"airports.csv.gz\",\n    ),\n    airquality=Metadata(\n        descr=\"Daily air quality measurements in New York, May to September 1973.\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/airquality\",\n        index=False,\n        source=HERE / \"airquality.csv.gz\",\n    ),\n    anscombe=Metadata(\n        descr=\"Four x-y datasets which have the same traditional statistical properties\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/anscombe\",\n        index=False,\n        source=HERE / \"anscombe.csv.gz\",\n    ),\n    band_instruments=Metadata(\n        descr=\"Band members of the Beatles and Rolling Stones\",\n        ref=\"https://dplyr.tidyverse.org/reference/band_members.html\",\n        index=False,\n        source=HERE / \"band_instruments.csv.gz\",\n    ),\n    band_instruments2=Metadata(\n        descr=\"Band members of the Beatles and Rolling Stones\",\n        ref=\"https://dplyr.tidyverse.org/reference/band_members.html\",\n        index=False,\n        source=HERE / \"band_instruments2.csv.gz\",\n    ),\n    band_members=Metadata(\n        descr=\"Band members of the Beatles and Rolling Stones\",\n        ref=\"https://dplyr.tidyverse.org/reference/band_members.html\",\n        index=False,\n        source=HERE / \"band_members.csv.gz\",\n    ),\n    billboard=Metadata(\n        descr=\"Song rankings for Billboard top 100 in the year 2000\",\n        ref=\"https://tidyr.tidyverse.org/reference/billboard.html\",\n        index=False,\n        source=HERE / \"billboard.csv.gz\",\n    ),\n    chickweight=Metadata(\n        descr=\"Weight versus age of chicks on different diets\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/ChickWeight\",\n        index=False,\n        source=HERE / \"chickweight.csv.gz\",\n    ),\n    cms_patient_care=Metadata(\n        descr=\"Data from the Centers for Medicare & Medicaid Services\",\n        ref=\"https://tidyr.tidyverse.org/reference/cms_patient_experience.html\",\n        index=False,\n        source=HERE / \"cms_patient_care.csv.gz\",\n    ),\n    cms_patient_experience=Metadata(\n        descr=\"Data from the Centers for Medicare & Medicaid Services\",\n        ref=\"https://tidyr.tidyverse.org/reference/cms_patient_experience.html\",\n        index=False,\n        source=HERE / \"cms_patient_experience.csv.gz\",\n    ),\n    construction=Metadata(\n        descr=\"Completed construction in the US in 2018\",\n        ref=\"https://tidyr.tidyverse.org/reference/construction.html\",\n        index=False,\n        source=HERE / \"construction.csv.gz\",\n    ),\n    diamonds=Metadata(\n        descr=\"A dataset containing the prices and other attributes of almost 54,000 diamonds\",\n        ref=\"https://ggplot2.tidyverse.org/reference/diamonds.html\",\n        index=False,\n        source=HERE / \"diamonds.csv.gz\",\n    ),\n    economics=Metadata(\n        descr=\"US economic time series\",\n        ref=\"https://ggplot2.tidyverse.org/reference/economics.html\",\n        index=False,\n        source=HERE / \"economics.csv.gz\",\n    ),\n    economics_long=Metadata(\n        descr=\"US economic time series\",\n        ref=\"https://ggplot2.tidyverse.org/reference/economics.html\",\n        index=False,\n        source=HERE / \"economics_long.csv.gz\",\n    ),\n    faithful=Metadata(\n        descr=\"Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/faithful\",\n        index=False,\n        source=HERE / \"faithful.csv.gz\",\n    ),\n    faithfuld=Metadata(\n        descr=\"2d density estimate of Old Faithful data\",\n        ref=\"https://ggplot2.tidyverse.org/reference/faithfuld.html\",\n        index=False,\n        source=HERE / \"faithfuld.csv.gz\",\n    ),\n    fish_encounters=Metadata(\n        descr=\"Information about fish swimming down a river\",\n        ref=\"https://tidyr.tidyverse.org/reference/fish_encounters.html\",\n        index=False,\n        source=HERE / \"fish_encounters.csv.gz\",\n    ),\n    flights=Metadata(\n        descr=\"all flights that departed from NYC in 2013\",\n        ref=\"https://github.com/tidyverse/nycflights13\",\n        index=False,\n        source=HERE / \"flights.csv.gz\",\n    ),\n    gss_cat=Metadata(\n        descr=\"A sample of categorical variables from the General Social survey\",\n        ref=\"https://forcats.tidyverse.org/reference/gss_cat.html\",\n        index=False,\n        source=HERE / \"gss_cat.csv.gz\",\n    ),\n    household=Metadata(\n        descr=\"This dataset is based on an example in `vignette(\\\"datatable-reshape\\\", package = \\\"data.table\\\")`\",\n        ref=\"https://tidyr.tidyverse.org/reference/household.html\",\n        index=False,\n        source=HERE / \"household.csv.gz\",\n    ),\n    iris=Metadata(\n        descr=\"Edgar Anderson's Iris Data\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/iris\",\n        index=False,\n        source=HERE / \"iris.csv.gz\",\n    ),\n    luv_colours=Metadata(\n        descr=\"colors() in Luv space\",\n        ref=\"https://ggplot2.tidyverse.org/reference/luv_colours.html\",\n        index=False,\n        source=HERE / \"luv_colours.csv.gz\",\n    ),\n    midwest=Metadata(\n        descr=\"Midwest demographics\",\n        ref=\"https://ggplot2.tidyverse.org/reference/midwest.html\",\n        index=False,\n        source=HERE / \"midwest.csv.gz\",\n    ),\n    mpg=Metadata(\n        descr=\"Fuel economy data from 1999 to 2008 for 38 popular models of cars\",\n        ref=\"https://ggplot2.tidyverse.org/reference/mpg.html\",\n        index=False,\n        source=HERE / \"mpg.csv.gz\",\n    ),\n    msleep=Metadata(\n        descr=\"An updated and expanded version of the mammals sleep dataset\",\n        ref=\"https://ggplot2.tidyverse.org/reference/msleep.html\",\n        index=False,\n        source=HERE / \"msleep.csv.gz\",\n    ),\n    mtcars=Metadata(\n        descr=\"Motor Trend Car Road Tests\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/mtcars\",\n        index=True,\n        source=HERE / \"mtcars.csv.gz\",\n    ),\n    planes=Metadata(\n        descr=\"construction information about each plane\",\n        ref=\"https://github.com/tidyverse/nycflights13\",\n        index=False,\n        source=HERE / \"planes.csv.gz\",\n    ),\n    population=Metadata(\n        descr=\"A subset of data from the World Health Organization Global Tuberculosis Report, and accompanying global populations.\",\n        ref=\"https://tidyr.tidyverse.org/reference/who.html\",\n        index=False,\n        source=HERE / \"population.csv.gz\",\n    ),\n    presidential=Metadata(\n        descr=\"Terms of 11 presidents from Eisenhower to Obama\",\n        ref=\"https://ggplot2.tidyverse.org/reference/presidential.html\",\n        index=False,\n        source=HERE / \"presidential.csv.gz\",\n    ),\n    relig_income=Metadata(\n        descr=\"Pew religion and income survey\",\n        ref=\"https://tidyr.tidyverse.org/reference/relig_income.html\",\n        index=False,\n        source=HERE / \"relig_income.csv.gz\",\n    ),\n    seals=Metadata(\n        descr=\"Vector field of seal movements\",\n        ref=\"https://ggplot2.tidyverse.org/reference/seals.html\",\n        index=False,\n        source=HERE / \"seals.csv.gz\",\n    ),\n    smith=Metadata(\n        descr=\"A small demo dataset describing John and Mary Smith.\",\n        ref=\"https://tidyr.tidyverse.org/reference/smiths.html\",\n        index=False,\n        source=HERE / \"smith.csv.gz\",\n    ),\n    starwars=Metadata(\n        descr=\"tarwars characters (columns films, vehicles and starships are not included)\",\n        ref=\"https://dplyr.tidyverse.org/reference/starwars.html\",\n        index=False,\n        source=HERE / \"starwars.csv.gz\",\n    ),\n    state_abb=Metadata(\n        descr=\"character vector of 2-letter abbreviations for the state names.\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/state\",\n        index=False,\n        source=HERE / \"state_abb.csv.gz\",\n    ),\n    state_division=Metadata(\n        descr=\"factor giving state divisions (New England, Middle Atlantic, South Atlantic, East South Central, West South Central, East North Central, West North Central, Mountain, and Pacific).\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/state\",\n        index=False,\n        source=HERE / \"state_division.csv.gz\",\n    ),\n    state_region=Metadata(\n        descr=\"factor giving the region (Northeast, South, North Central, West) that each state belongs to.\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/state\",\n        index=False,\n        source=HERE / \"state_region.csv.gz\",\n    ),\n    storms=Metadata(\n        descr=\"This data is a subset of the NOAA Atlantic hurricane database best track data\",\n        ref=\"https://dplyr.tidyverse.org/reference/storms.html\",\n        index=True,\n        source=HERE / \"storms.csv.gz\",\n    ),\n    table1=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table1.csv.gz\",\n    ),\n    table2=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table2.csv.gz\",\n    ),\n    table3=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table3.csv.gz\",\n    ),\n    table4a=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table4a.csv.gz\",\n    ),\n    table4b=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table4b.csv.gz\",\n    ),\n    table5=Metadata(\n        descr=\"Example tabular representations\",\n        ref=\"https://tidyr.tidyverse.org/reference/table1.html\",\n        index=False,\n        source=HERE / \"table5.csv.gz\",\n    ),\n    toothgrowth=Metadata(\n        descr=\"The Effect of Vitamin C on Tooth Growth in Guinea Pigs\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/ToothGrowth\",\n        index=False,\n        source=HERE / \"toothgrowth.csv.gz\",\n    ),\n    txhousing=Metadata(\n        descr=\"Housing sales in TX\",\n        ref=\"https://ggplot2.tidyverse.org/reference/txhousing.html\",\n        index=False,\n        source=HERE / \"txhousing.csv.gz\",\n    ),\n    us_rent_income=Metadata(\n        descr=\"US rent and income data\",\n        ref=\"https://tidyr.tidyverse.org/reference/us_rent_income.html\",\n        index=False,\n        source=HERE / \"us_rent_income.csv.gz\",\n    ),\n    warpbreaks=Metadata(\n        descr=\"The Number of Breaks in Yarn during Weaving\",\n        ref=\"https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/warpbreaks\",\n        index=False,\n        source=HERE / \"warpbreaks.csv.gz\",\n    ),\n    weather=Metadata(\n        descr=\"hourly meterological data for each airport\",\n        ref=\"https://github.com/tidyverse/nycflights13\",\n        index=False,\n        source=HERE / \"weather.csv.gz\",\n    ),\n    who=Metadata(\n        descr=\"A subset of data from the World Health Organization Global Tuberculosis Report, and accompanying global populations.\",\n        ref=\"https://tidyr.tidyverse.org/reference/who.html\",\n        index=False,\n        source=HERE / \"who.csv.gz\",\n    ),\n    who2=Metadata(\n        descr=\"A subset of data from the World Health Organization Global Tuberculosis Report, and accompanying global populations.\",\n        ref=\"https://tidyr.tidyverse.org/reference/who.html\",\n        index=False,\n        source=HERE / \"who2.csv.gz\",\n    ),\n    world_bank_pop=Metadata(\n        descr=\"Population data from the world bank\",\n        ref=\"https://tidyr.tidyverse.org/reference/world_bank_pop.html\",\n        index=False,\n        source=HERE / \"world_bank_pop.csv.gz\",\n    ),\n)\n"
  },
  {
    "path": "datar/datasets.py",
    "content": "# pragma: no cover\nimport warnings\n\n\nclass DatasetsDeprecatedWarning(DeprecationWarning):\n    ...\n\n\nwarnings.simplefilter(\"always\", DatasetsDeprecatedWarning)\n\nwarnings.warn(\n    \"Import data from `datar.datasets` is deprecated and \"\n    \"will be removed in the future. try `datar.data` instead.\",\n    DatasetsDeprecatedWarning,\n)\n\n\ndef __getattr__(name: str):\n    from . import data\n    return getattr(data, name)\n"
  },
  {
    "path": "datar/dplyr.py",
    "content": "\nfrom .core.load_plugins import plugin as _plugin\nfrom .core.options import get_option as _get_option\nfrom .apis.dplyr import *\n\nlocals().update(_plugin.hooks.dplyr_api())\n__all__ = [key for key in locals() if not key.startswith(\"_\")]\n_conflict_names = {\"filter\", \"slice\"}\n\nif _get_option(\"allow_conflict_names\"):\n    __all__.extend(_conflict_names)\n    for name in _conflict_names:\n        locals()[name] = locals()[name + \"_\"]\n\n\ndef __getattr__(name):\n    \"\"\"Even when allow_conflict_names is False, datar.base.sum should be fine\n    \"\"\"\n    if name in _conflict_names:\n        import sys\n        import ast\n        from executing import Source\n        node = Source.executing(sys._getframe(1)).node\n        if isinstance(node, (ast.Call, ast.Attribute)):\n            # import datar.dplyr as d\n            # d.sum(...)\n            return globals()[name + \"_\"]\n\n    raise AttributeError\n"
  },
  {
    "path": "datar/forcats.py",
    "content": "\nfrom .core.load_plugins import plugin as _plugin\nfrom .apis.forcats import *\n\nlocals().update(_plugin.hooks.forcats_api())\n"
  },
  {
    "path": "datar/misc.py",
    "content": "from typing import Any as _Any, Callable as _Callable\n\nfrom pipda import register_verb as _register_verb\nfrom .core.verb_env import get_verb_ast_fallback as _get_verb_ast_fallback\n\nfrom .core.load_plugins import plugin as _plugin\n\nlocals().update(_plugin.hooks.misc_api())\n\n\n@_register_verb(object, ast_fallback=_get_verb_ast_fallback(\"pipe\"))\ndef pipe(data: _Any, func: _Callable, *args, **kwargs) -> _Any:\n    \"\"\"Apply a function to the data\n\n    This function is similar to pandas.DataFrame.pipe() and allows you to\n    apply custom functions in a piping workflow. Works with any data type.\n\n    Args:\n        data: The data object (can be any type)\n        func: Function to apply to the data. ``args`` and ``kwargs`` are\n            passed into ``func``.\n        *args: Positional arguments passed into ``func``\n        **kwargs: Keyword arguments passed into ``func``\n\n    Returns:\n        The return value of ``func``\n\n    Examples:\n        >>> import datar.all as dr\n        >>> # Works with lists\n        >>> [1, 2, 3] >> dr.pipe(lambda x: [i * 2 for i in x])\n        [2, 4, 6]\n\n        >>> # Works with dicts\n        >>> data = {'a': 1, 'b': 2}\n        >>> data >> dr.pipe(lambda x: {k: v * 2 for k, v in x.items()})\n        {'a': 2, 'b': 4}\n\n        >>> # With additional arguments\n        >>> def add_value(data, value):\n        ...     return [x + value for x in data]\n        >>> [1, 2, 3] >> dr.pipe(add_value, 10)\n        [11, 12, 13]\n\n        >>> # Chain multiple operations\n        >>> [1, 2, 3] >> dr.pipe(lambda x: [i * 2 for i in x]) >> dr.pipe(sum)\n        12\n    \"\"\"\n    return func(data, *args, **kwargs)\n"
  },
  {
    "path": "datar/tibble.py",
    "content": "\nfrom .core.load_plugins import plugin as _plugin\nfrom .apis.tibble import *\n\nlocals().update(_plugin.hooks.tibble_api())\n"
  },
  {
    "path": "datar/tidyr.py",
    "content": "\nfrom .core.load_plugins import plugin as _plugin\nfrom .apis.tidyr import *\n\nlocals().update(_plugin.hooks.tidyr_api())\n"
  },
  {
    "path": "docs/CHANGELOG.md",
    "content": "# Change Log\n\n## 0.15.17\n\n- feat: update pandas dependency version to ^0.7 with pandas v3 support\n\n## 0.15.16\n\n- refactor: migrate poetry to uv for dep management\n- fix: correct `__all__` declaration in `__init__.py`\n\n## 0.15.15\n\n- docs: update outdated notebook for filter (#223)\n- chore: update python-simpleconf version to ^0.9\n\n## 0.15.14\n\n- chore: update python-simpleconf version to ^0.8\n\n## 0.15.13\n\n- feat: add environment variables to control verb AST fallback behavior (#219)\n\n## 0.15.12\n\n- chore: update datar-pandas to version ^0.6\n  - fix: fix fct_recode and fct_collapse with ordered factor (pwwang/datar#216)\n  - fix: handle MultiIndex in _agg_result_compatible (pwwang/datar#214)\n  - feat: suport pandas.Grouper() for group_by (pwwang/datar#215)\n- chore: update datar-arrow to version ^0.2\n  - chore: bump pyarrow to ^20\n\n## 0.15.11\n\n- feat: add generic pipe() function to datar for applying custom functions in piping workflows (#212)\n- chore: update dependances\n- test: fix missing reframe from tests\n\n## 0.15.10\n\n- ci: update deployment environment to use ubuntu-latest\n- feat: add dplyr.reframe (#210)\n- docs: fix reference map links\n\n## 0.15.9\n\n- ci: ensure Python version is set for setup step\n- chore: update numpy dependency to allow any version\n\n## 0.15.8\n\n- chore(deps): update python-simpleconf to version 0.7\n\n## 0.15.7\n\n- chore(deps): drop support for python3.8\n- ci: update Python version matrix to drop 3.8 and add 3.11, 3.12\n- chore(docs): add mkdocs and related dependencies for documentation generation\n\n## 0.15.6\n\n- deps: bump simplug to 0.4, datar-numpy to 0.3.4 and datar-pandas to 0.5.5\n- tests: adopt pytest v8\n- ci: use latest actions\n\n## 0.15.5\n\n- deps: bump datar-numpy to 0.3.3\n\n## 0.15.4\n\n- docs: fix typo in README.md (#197)\n- docs: change `filter` to `filter_` in README.md\n- docs: fix typo in data.md\n- deps: bump datar-pandas to 0.5.4 (support pandas 2.2+)\n\n## 0.15.3\n\n- ⬆️ Bump pipda to 0.13.1\n\n## 0.15.2\n\n- ⬆️ Bump datar-pandas to 0.5.2 to fix `pip install datar[pandas]` not having numpy backend installed.\n\n## 0.15.1\n\n- ⬆️ Bump datar-pandas to 0.5.1\n    - Dismiss ast warning for if_else.\n    - Make scipy and wcwidth optional deps\n    - Set seed in tests\n    - Dismiss warnings of fillna with method for pandas2.1\n\n## 0.15.0\n\n- ✨ Add data who2, household, cms_patient_experience, and\ncms_patient_care\n- ⬆️ Bump datar-pandas to 0.5 to support pandas2 (#186)\n\n## 0.14.0\n\n- ⬆️ Bump pipda to 0.13\n- 🍱 Support dplyr up to 1.1.3\n- 👽️ Align `rows_*()` verbs to align with dplyr 1.1.3 (#188)\n- 🔧 Update pyproject.toml to generate setup.py for poetry\n\n## 0.13.1\n\n- 🎨 Allow `datar.all.filter` regardless of `allow_conflict_names` (#184)\n\n## 0.13.0\n\n- 👷 Add scripts for codesandbox\n- 💥 Change the option for conflict names (#184)\n\n    There is no more warning for conflict names (python reserved names). By default, those names are suffixed with `_` (ie `filter_` instead of `filter`). You can still use the original names by setting `allow_conflict_names` to `True` in `datar.options()`.\n\n    ```python\n    from datar import options\n    options(allow_conflict_names=True)\n    from datar.all import *\n    filter  # <function datar.dplyr.filter_ at 0x7f62303c8940>\n    ```\n\n## 0.12.2\n\n- ➕ Add pyarrow backend\n- 🐛 Exclude coverage for multiline version in `get_versions()`\n- ⬆️ Bump up `python-simpleconf` to 0.6 so datar can be installed in Windows (#180)\n\n## 0.12.1\n\n- ⬆️ Bump datar-numpy to ^0.2\n\n## 0.12.0\n\n- 📝 Added import f to plotnine on README.md (#177)\n- ⬆️ Drop support for python3.7\n- ⬆️ Bump pipda to 0.12\n- 🍱 Update storms data to 2020 (tidyverse/dplyr#5899)\n\n## 0.11.2\n\n- 📝 Add pypi downloads badge to README\n- 📝 Fix github workflow badges for README\n- 🐛 Add return type annotation to fix #173\n- ⬆️ Bump python-slugify to v8\n\n## 0.11.1\n\n- 🐛 Fix `get_versions()` not showing plugin versions\n- 🐛 Fix plugins not loaded when loading datasets\n- 🚸 Add github issue templates\n\n## 0.11.0\n\n- 📝 Add testimonials and backend badges in README.md\n- 🐛 Load entrypoint plugins only when APIs are called (#162)\n- 💥 Rename `other` module to `misc`\n\n## 0.10.3\n\n- ⬆️ Bump simplug to 0.2.2\n- ✨ Add `apis.other.array_ufunc` to support numpy ufuncs\n- 💥 Change hook `data_api` to `load_dataset`\n- ✨ Allow backend for `c[]`\n- ✨ Add `DatarOperator.with_backend()` to select backend for operators\n- ✅ Add tests\n- 📝 Update docs for backend supports\n\n## 0.10.2\n\n- 🚑 Fix false warning when importing from all\n\n## 0.10.1\n\n- Pump simplug to 0.2\n\n## 0.10.0\n\n- Detach backend support, so that more backends can be supported easier in the future\n  - numpy backend: https://github.com/pwwang/datar-numpy\n  - pandas backend: https://github.com/pwwang/datar-pandas\n- Adopt pipda 0.10 so that functions can be pipeable (#148)\n- Support pandas 1.5+ (#148), but v1.5.0 excluded (see pandas-dev/pandas#48645)\n\n## 0.9.1\n\n- Pump pipda to 0.8.0 (fixes #149)\n\n## 0.9.0\n\n### Fixes\n\n- Fix `weighted_mean` not handling group variables with NaN values (#137)\n- Fix `weighted_mean` on `NA` raising error instead of returning `NA` (#139)\n- Fix pandas `.groupby()` used internally not inheriting `sort`, `dropna` and `observed` (#138, #142)\n- Fix `mutate/summarise` not counting references inside function as used for `_keep` `\"used\"/\"unused\"`\n- Fix metadata `_datar` of nested `TibbleGrouped` not frozen\n\n### Breaking changes\n\n- Refactor `core.factory.func_factory()` (#140)\n- Use `base.c[...]` for range short cut, instead of `f[...]`\n- Use `tibble.fibble()` when constructing `Tibble` inside a verb, instead of `tibble.tibble()`\n- Make `n` a keyword-only argument for `base.ntile`\n\n### Deprecation\n\n- Deprecate `verb_factory`, use `register_verb` from `pipda` instead\n- Deprecate `base.data_context`\n\n### Dependences\n\n- Adopt `pipda` `v0.7.1`\n- Remove `varname` dependency\n- Install `pdtypes` by default\n\n## 0.8.6\n\n- 🐛 Fix weighted_mean not working for grouped data (#133)\n- ✅ Add tests for weighted_mean on grouped data\n- ⚡️ Optimize distinct on existing columns (#128)\n\n## 0.8.5\n\n- 🐛 Fix columns missing after Join by same columns using mapping (#122)\n\n## 0.8.4\n\n- ➖ Add optional deps to extras so they aren't installed by default\n- 🎨 Giva better message when optional packages not installed\n\n## 0.8.3\n\n- ⬆️ Upgrade pipda to v0.6\n- ⬆️️ Upgrade thon-simpleconf to 5.5\n\n## 0.8.2\n\n- ♻️ Move `glimpse` to `dplyr` (as `glimpse` is a `tidyverse-dplyr` [API](https://dplyr.tidyverse.org/reference/glimpse.html))\n- 🐛 Fix `glimpse()` output not rendering in qtconsole (#117)\n- 🐛 Fix `base.match()` for pandas 1.3.0\n- 🐛 Allow `base.match()` to work with grouping data (#115)\n- 📌 Use `rtoml` (`python-simpleconf`) instead of `toml` (See https://github.com/pwwang/toml-bench)\n- 📌 Update dependencies\n\n## 0.8.1\n\n- 🐛 Fix `month_abb` and `month_name` being truncated (#112)\n- 🐛 Fix `unite()` not keeping other columns (#111)\n\n## 0.8.0\n\n- ✨ Support `base.glimpse()` (#107, machow/siuba#409)\n- 🐛 Register `base.factor()` and accept grouped data (#108)\n- ✨ Allow configuration file to save default options\n- 💥 Replace option `warn_builtin_names` with `imiport_names_conflict` (#73)\n- 🩹 Attach original `__module__` to `func_factory` registed functions\n- ⬆️ Bump `pipda` to `0.5.9`\n\n## 0.7.2\n\n- ✨ Allow tidyr.unite() to unite multiple columns into a list, instead of join them (#105)\n- 🩹 Typos in argument names of tidyr.pivot_longer() (#104)\n- 🐛 Fix base.sprintf() not working with Series (#102)\n\n## 0.7.1\n\n- 🐛 Fix settingwithcopywarning in tidyr.pivot_wider()\n- 📌 Pin deps for docs\n- 💚 Don't upload coverage in PR\n- 📝 Fix typos in docs (#99, #100) (Thanks to @pdwaggoner)\n\n\n## 0.7.0\n\n- ✨ Support `modin` as backend\n- ✨ Add `_return` argument for `datar.options()`\n- 🐛 Fix `tidyr.expand()` when `nesting(f.name)` as argument\n\n## 0.6.4\n\n### Breaking changes\n\n- 🩹 Make `base.ntile()` labels 1-based (#92)\n\n### Fixes\n\n- 🐛 Fix `order_by` argument for `dplyr.lead-lag`\n\n### Enhancements\n\n- 🚑 Allow `base.paste/paste0()` to work with grouped data\n- 🩹 Change dtypes of `base.letters/LETTERS/month_abb/month_name`\n\n### Housekeeping\n\n- 📝 Update and fix reference maps\n- 📝 Add `environment.yml` for binder to work\n- 📝 Update styles for docs\n- 📝 Update styles for API doc in notebooks\n- 📝 Update README for new description about the project and add examples from StackOverflow\n\n\n## 0.6.3\n\n- ✨ Allow `base.c()` to handle groupby data\n- 🚑 Allow `base.diff()` to work with groupby data\n- ✨ Allow `forcats.fct_inorder()` to work with groupby data\n- ✨ Allow `base.rep()`'s arguments `length` and `each` to work with grouped data\n- ✨ Allow `base.c()` to work with grouped data\n- ✨ Allow `base.paste()`/`base.paste0()` to work with grouped data\n- 🐛 Force `&/|` operators to return boolean data\n- 🚑 Fix `base.diff()` not keep empty groups\n- 🐛 Fix recycling non-ordered grouped data\n- 🩹 Fix `dplyr.count()/tally()`'s warning about the new name\n- 🚑 Make `dplyr.n()` return groupoed data\n- 🐛 Make `dplyr.slice()` work better with rows/indices from grouped data\n- 🩹 Make `dplyr.ntile()` labels 1-based\n- ✨ Add `datar.attrgetter()`, `datar.pd_str()`, `datar.pd_cat()` and `datar.pd_dt()`\n\n## 0.6.2\n\n- 🚑 Fix #87 boolean operator losing index\n- 🚑 Fix false alarm from `rename()`/`relocate()` for missing grouping variables (#89)\n- ✨ Add `base.diff()`\n- 📝 [doc] Update/Fix doc for case_when (#87)\n- 📝 [doc] Fix links in reference map\n- 📝 [doc] Update docs for `dplyr.base`\n\n## 0.6.1\n\n- 🐛 Fix `rep(df, n)` producing a nested df\n- 🐛 Fix `TibbleGrouped.__getitem__()` not keeping grouping structures\n\n## 0.6.0\n\n### General\n- Adopt `pipda` 0.5.7\n- Reimplement the split-apply-combine rule to solve all performance issues\n- Drop support for pandas v1.2, require pandas v1.3+\n- Remove all `base0_` options and all indices are now 0-based, except `base.seq()`, ranks and their variants\n- Remove messy type annotations for now, will add them back in the future\n- Move implementation of data type display for frames in terminal and notebook to `pdtypes` package\n- Change all arguments end with \"_\" to arguments start with it to avoid confusion\n- Move module `datar.stats` to `datar.base.stats`\n- Default all `na_rm` arguments to `True`\n- Rename all `ptype` arguments for `tidyr` verbs into `dtypes`\n\n### Details\n- Introduct new API to register function `datar.core.factory.func_factory()`\n- Aliase `register_verb` and `register_func` as `verb_factory` and `context_func_factory` in `datar.core.factory`\n- Expose `options`, `options_context`, `add_option` and `get_option` in `datar/__init__.py` and remove them from `datar.base`\n- Attach `pipda.options` to `datar.options`\n- Move `head` and `tail` from `datar.utils` to `datar.base`\n- Remove redundant `unique` implentation from `datar.base.seq`\n- Add `datar.core.factory.func_factory()` for developers to register function that works with different types of data (`NDFrame`, `GropuBy`, etc)\n- Not ensure NAs after NA for `base.cumxxx()` families any more\n- Remove `set_names` from `datar.stats`, use `names(df, <new names>)` from `datar.base` instead\n- Optimize `intersect`, `union`, `setdiff`, `append` from `datar.base`\n- Keep grouping variables for `intersect`, `union`, `setdiff` and `union_all` when `y` is a grouped df, even when `x` is not\n- Remove `drop_index` from `datar.datar`, use `datar.tibble.remove_rownames/remove_index/drop_index` instead\n- Add `assert_tibble_equal()` in `datar.testing` to test whether 2 tibbles are equal\n- `rep()` now works with frames\n- `c_across()` now returns a rowwise df to work with functions that apply to df on `axis=1`\n- `datar.dplyr.order_by()` now only works like it does in `r-dplyr` and only in side a verb\n- `datar.dplyr.group_by()` detauls `_sort` to `False` for speed\n- Only raise error for duplicated column names when selected by column name instead of index\n- `base.scale()` returns a series rather than a frame when works with a series\n- Other fixes and optimizations\n\n## 0.5.6\n\n- 🐛 Hotfix for types registered for base.proportions (#77)\n- 👽️ Fix for pandas 1.4\n\n## 0.5.5\n\n- Fix #71: semi_join returns duplicated rows\n\n## 0.5.4\n\n- Fix `filter()` restructures group_data incorrectly (#69)\n\n## 0.5.3\n\n- ⚡️ Optimize dplyr.arrange when data are series from the df itself\n- 🐛 Fix sub-df order of apply for grouped df (#63)\n- 📝 Update doc for argument by for join functions (#62)\n- 🐛 Fix mean() with option na_rm=False does not work (#65)\n\n## 0.5.2\nMore of a maintenance release.\n\n- 🔧 Add metadata for datasets\n- 🔊 Send logs to stderr, instead of stdout\n- 📌Pin dependency versions\n- 🚨 Switch linter to flake8\n- 📝 Update some docs to fit `datar-cli`\n\n## 0.5.1\n- Add documentation about \"blind\" environment (#45, #54, #55)\n- Change `base.as_date()` to return pandas datetime types instead python datetime types (#56)\n- Add `base.as_pd_date()` to be an alias of `pandas.to_datetime()` (#56)\n- Expose `trimws` to `datar.all` (#58)\n\n## 0.5.0\n\nAdded:\n\n- Added `forcats` (#51 )\n- Added `base.is_ordered()`, `base.nlevels()`, `base.ordered()`, `base.rank()`, `base.order()`, `base.sort()`, `base.tabulate()`, `base.append()`, `base.prop_table()` and `base.proportions()`\n- Added `gss_cat` dataset\n\nFixed:\n\n- Fixed an issue when `Collection` dealing with `numpy.int_`\n\nEnhanced:\n\n- Added `base0_` argument for `datar.get()`\n- Passed `__calling_env` to registered functions/verbs when used internally (this makes sure the library to be robust in different environments)\n\n\n## 0.4.4\n\n- Adopt `varname` `v0.8.0`\n- Add `base.make_names()` and `base.make_unique()`\n\n## 0.4.3\n\n- Adopt `pipda` `0.4.5`\n- Make dataset names case-insensitive;\n- Add datasets: `ToothGrowth`, `economics`, `economics_long`, `faithful`, `faithfuld`, `luv_colours`, `midwest`, `mpg`, `msleep`, `presidential`, `seals`, and `txhousing`\n- Add `base.complete_cases()`\n- Change `datasets.all_datasets()` to `datasets.list_datasets()`\n- Make sure `assume_all_piping` mode works internally: #45\n\n## 0.4.2\n\n- Adopt `pipda` 0.4.4\n- Add `varname` to dependency to close #30\n- Rename `datar.datar_versions` to `datar.get_versions`\n- Port a set of functions from r-base, incluing:\n    - `prod`, `sign`, `signif`, `trunc`, `exp`, `log`, `log2`, `log10`, `log1p`,\n    - `is_finite`, `is_infinite`, `is_nan`,\n    - `match`,\n    - `startswith`, `endswith`, `strtoi`, `chartr`, `tolower`, `toupper`,\n    - `max_col`\n\n\n## 0.4.1\n\n- Don't use piping syntax internally (`>>=`)\n- Add `python`, `numpy` and `datar` version to `datar.datar_versions()`\n- Fix #40: anti_join/semi_join not working when by is column mapping\n\n## 0.4.0\n\n- Adopt `pipda` v0.4.2\n\nPerformance improved:\n- Refactor core.grouped to adopt pandas's groupby\n- Try to use `DataFrame.agg()`/`DataFrameGroupBy.agg()` when function applied on a single columns (Related issues: #27, #33, #37)\n\nFixed:\n- Fix when `data` or `context` as new column name for `mutate()`\n- Fix SettingwithCopyWarning in pivot_longer\n- Use regular calling internally to make sure it works in some cases that node cannot be detected (ie `Gooey`/`%%timeit` in jupyter)\n\nAdded:\n- `datar.datar_versions()` to show versions of related packages for bug reporting.\n\n## 0.3.2\n- Adopt `pipda` v0.4.1 to fix `getattr()` failure for operater-connected expressions (#38)\n- Add `str_dtype` argument to `as_character()` to partially fix #36\n- Update license in `core._frame_format_patch` (#28)\n\n## 0.3.1\n- Adopt `pipda` v0.4.0\n- Change argument `_dtypes` to `dtypes_` for tibble-families\n\n## 0.3.0\n- Adopt `pipda` v0.3.0\n\nBreaking changes:\n\n- Rename argument `dtypes` of `unchop` and `unnest` back to `ptype`\n- Change all `_base0` to `base0_`\n- Change argument `how` of `tidyr.drop_na` to `how_`\n\n## 0.2.3\n- Fix compatibility with `pandas` `v1.2.0~4` (#20, thanks to @antonio-yu)\n- Fix base.table when inputs are factors and exclude is NA;\n- Add base.scale/col_sums/row_sums/col_means/row_means/col_sds/row_sds/col_medians/row_medians\n\n## 0.2.2\n- Use a better strategy warning for builtin name overriding.\n- Fix index of subdf not dropped for mutate on grouped data\n- Fix `names_glue` not working with single `values_from` for `tidyr.pivot_wider`\n- Fix `base.paste` not registered\n- Fix `base.grep`/`grepl` on NA values\n- Make `base.sub`/`gsub` return scalar when inputs are scalar strings\n\n## 0.2.1\n- Use observed values for non-observsed value match for group_data instead of NAs, which might change the dtype.\n- Fix tibble recycling values too early\n\n## 0.2.0\nAdded:\n- Add `base.which`, `base.bessel`, `base.special`, `base.trig_hb` and `base.string` modules\n- Add Support for duplicated keyword arguments for dplyr.mutate/summarise by using `_` as suffix\n- Warn when import python builtin names directly; ; Remove modkit dependency\n\nFixed:\n- Fixed errors when use`a_1` as names for `\"check_unique\"` name repairs\n- Fixed #14: `f.a.mean()` not applied to grouped data\n\nChanged:\n- Don't allow `from datar.datasets import *`\n- Remove `modkit` dependency\n- Reset `NaN` to `NA`\n- Rename `base.getOption` to `base.get_option`\n- Rename `stats.setNames` to `stats.set_names`\n\n## 0.1.1\n- Adopt `pipda` 0.2.8\n- Allow `f.col1[f.col2==max(f.col2)]` like expression\n- Add `base.which/cov/var`\n- Fix `base.max`\n- Add `datasets.ChickWeight`\n- Allow `dplyr.across` to have plain functions passed with default `EVAL` context.\n\n## 0.1.0\nAdded:\n- `pandas.NA` as `NaN`\n- Dtypes display when printing a dataframe (string, html, notebook)\n- `zibble` to construct dataframes with names specified together, and values together.\n\nFixed:\n- `base.diag()` on dataframes\n- Data recycling when length is different from original data\n- `datar.itemgetter()` not public\n\nChanged:\n- Behavior of `group_by()` with `_drop=False`. Invisible values will not mix with visible values of other columns\n\n## 0.0.7\n- Add dplyr rows verbs\n- Allow mixed numbering (with `c()` and `f[...]`) for tibble construction\n- Allow slice (`f[a:b]`) to be expanded into sequence for `EVAL` context\n- Finish tidyr porting.\n\n## 0.0.6\n- Add `options`, `get_option` and `options_context` to `datar.base` to allow set/get global options\n- Add options: `dplyr.summarise.inform`\n- Add `base0_` argument to all related APIs\n- Add `nycflights13` datasets\n- Support slice_head/slice_tail for grouped data\n\n## 0.0.5\n- Add option index.base.0;\n- Refactor Collection families\n\n## 0.0.4\n- Finish port of tibble.\n\n## 0.0.3\n- Add stats.weighted_mean\n- Allow function to prefer recycling input or output for summarise\n\n## 0.0.2\n- Port verbs and functions from tidyverse/dplyr and test them with original cases\n"
  },
  {
    "path": "docs/ENV_VARS.md",
    "content": "# Environment Variable Support for Verb AST Fallback\n\nThis document explains how to use environment variables to control the fallback behavior for verbs when AST (Abstract Syntax Tree) is not retrievable.\n\n## Overview\n\nWhen the AST of a function call is not available (e.g., in some interactive environments or when code is executed dynamically), datar verbs need to make assumptions about how they were called. You can now control this behavior using environment variables.\n\n## Environment Variables\n\n### Global Configuration\n\nSet the global fallback behavior for all verbs:\n\n```bash\nexport DATAR_VERB_AST_FALLBACK=\"piping\"\n```\n\nThis will assume all datar verbs are called with the piping pattern: `data >> verb(...)`\n\n### Per-Verb Configuration\n\nYou can also configure individual verbs:\n\n```bash\n# Assume select is called like: data >> select(...)\nexport DATAR_SELECT_AST_FALLBACK=\"piping\"\n\n# Assume mutate is called like: mutate(data, ...)\nexport DATAR_MUTATE_AST_FALLBACK=\"normal\"\n```\n\nPer-verb environment variables take precedence over the global setting.\n\n## Valid Values\n\nThe following values are supported for ast_fallback:\n\n- `\"piping\"`: Assume `data >> verb(...)` calling pattern\n- `\"normal\"`: Assume `verb(data, ...)` calling pattern\n- `\"piping_warning\"`: Assume piping call, but show a warning (default)\n- `\"normal_warning\"`: Assume normal call, but show a warning\n- `\"raise\"`: Raise an error when AST is not available\n\n## Examples\n\n### Example 1: Set Global Piping Mode\n\nAdd to your `.bashrc` or shell configuration:\n\n```bash\nexport DATAR_VERB_AST_FALLBACK=\"piping\"\n```\n\nThen in Python:\n\n```python\nfrom datar.all import *\n\n# This will work without warnings when AST is not available\niris >> select(f.Species, f.Sepal_Length)\n```\n\n### Example 2: Mixed Configuration\n\n```bash\n# Most verbs use piping\nexport DATAR_VERB_AST_FALLBACK=\"piping\"\n\n# But filter uses normal calling convention\nexport DATAR_FILTER_AST_FALLBACK=\"normal\"\n```\n\nThen in Python:\n\n```python\nfrom datar.all import *\n\n# select uses piping (from global setting)\niris >> select(f.Species)\n\n# filter uses normal calling (from per-verb setting)\nfilter(iris, f.Sepal_Length > 5)\n```\n\n### Example 3: Raise Errors for Debugging\n\n```bash\nexport DATAR_VERB_AST_FALLBACK=\"raise\"\n```\n\nThis will help you identify cases where AST is not available, which can be useful for debugging.\n\n## Notes\n\n- Environment variables are checked when the verb is registered (at import time).\n- If you change environment variables after importing datar modules, you'll need to restart your Python session for the changes to take effect.\n- If you explicitly specify `ast_fallback` in the `@register_verb()` decorator, it takes precedence over environment variables.\n- Verb names with trailing underscores (e.g., `filter_`) should use the environment variable without the underscore (e.g., `DATAR_FILTER_AST_FALLBACK`).\n"
  },
  {
    "path": "docs/backends.md",
    "content": "# Backends\n\nThe `datar` package is a collection of APIs that are ported from a bunch of R packages. The APIs are implemented in a backend-agnostic way, so that they can be used with different backends. Currently, `datar` supports the following backends:\n\n- [`numpy`](https://github.com/pwwang/datar-numpy): Mostly the implementations of functions from `datar.base`.\n- [`pandas`](https://github.com/pwwang/datar-pandas): Implementations using `pandas` as backend.\n\n## Installation of a backend\n\n```bash\npip install -U datar[<pandas>]\n```\n\n## Using desired backends\n\nYou can install multiple backends, but can use a subset of them.\n\n```python\nfrom datar import options\n\noptions(backends=['pandas'])\n\n# Import the API functions then\n```\n\n## Writing a backend\n\nA backend is supposed to implement as a `Simplug` plugin. There are a hooks to be implemented.\n\n### Hooks\n\n- `setup()`: calleed before any API is imported. You can do some setup here.\n- `get_versions()`: return a dict of versions of the dependencies of the backend. The keys are the names of the packages, and the values are the versions.\n- `load_dataset(name: str, metadata: Mapping)`: load a dataset, which can be loaded using `from datar.data import <dataset>`.\n- `base_api()`: load the implementation of `datar.apis.base`.\n- `dplyr_api()`: load the implementation of `datar.apis.dplyr`.\n- `tibble_api()`: load the implementation of `datar.apis.tibble`.\n- `forcats_api()`: load the implementation of `datar.apis.forcats`.\n- `tidyr_api()`: load the implementation of `datar.apis.tidyr`.\n- `other_api()`: load other backend-specific APIs.\n- `c_getitem(item)`: load the implementation of `datar.base.c.__getitem__` (`c[...]`).\n- `operate(op: str, x: Any, y: Any = None)`: load the implementation of the operators.\n\n## Seleting a backend at runtime\n\nYou can use `__backend` to select a backend at runtime.\n\n```python\nfrom datar.tibble import tibble\n\ntibble(..., __backend=\"pandas\")\n```\n\n## Selecting a backend for operators\n\nIf you have multiple backends installed, you can select a backend for operators.\n\n```python\nfrom datar.core.operator import DatarOperator\n\nDatarOperator.backend = \"pandas\"\n\n# Or use the context manager\nwith DatarOperator.with_backend(\"pandas\"):\n    data >> mutate(z=f.x + f.y)\n```\n\n## Selecting a backend for `c[]`\n\n```python\nfrom datar.base import c\n\nc.backend = \"pandas\"\n\n# Or use the context manager\nwith c.with_backend(\"pandas\"):\n    data >> mutate(z=c[1:3])\n```\n\n## Selecting a backend for numpy ufuncs\n\n```python\nfrom datar.apis.other import array_ufunc\n\narray_ufunc.backend = \"pandas\"\n\n# Or use the context manager\nwith array_ufunc.with_backend(\"pandas\"):\n    data >> mutate(z=np.sin(f.x))\n```\n"
  },
  {
    "path": "docs/data.md",
    "content": "\nSee full reference of datasets at: [reference-maps/data][1]\n\nDatasets have to be imported individually by:\n\n```python\nfrom datar.data import iris\n\n# or\nfrom datar import data\n\niris = data.iris\n```\n\nTo list all available datasets:\n\n```python\nfrom datar import data\nprint(datasets.descr_datasets())\n```\n\n`file` shows the path to the csv file of the dataset, and `index` shows if it has index (rownames).\n\n!!! Note\n\n    The column names are altered by replace `.` to `_`. For example `Sepal.Width` to `Sepal_Width`.\n\n!!! Note\n\n    Dataset names are case-insensitive. So you can do:\n\n    ```python\n    from datar.datasets import ToothGrowth\n    # or\n    from datar.datasets import toothgrowth\n    ```\n\nSee also [Backends][2] for implementations to loaad datasets.\n\n[1]: ./reference-maps/data\n[2]: ./backends\n"
  },
  {
    "path": "docs/f.md",
    "content": "## Why `f`?\n\nIt is just fast for you to type, since usually, it is `.` right after `f`. Then you have your left hand and right hand working together sequentially.\n\n## The `Symbolic` object `f`\n\nYou can import it by `from datar import f`, or `from datar.all import *`\n\n`f` is a universal `Symbolic` object, which does the magic to connect the expressions in verb arguments so that they can be delayed to execute.\n\nThere are different uses for the `f`.\n\n- Use as a proxy to refer to dataframe columns (i.e. `f.x`, `f['x']`)\n- Use as the column name marker for `tribble`:\n\n    ```python\n    tribble(\n        f.x, f.y\n        1,   2\n        3,   4\n    )\n    ```\n\n!!! note\n\n    If you want a sequence literal, other than using `base.seq()`, you can\n    also use `base.c[]`.\n\n    For example,\n    ```python\n    from datar.base import c\n    from datar.tibble import tibble\n    df = tibble(x=c[1:5])  # 1, 2, 3, 4\n    ```\n\n\n## If you don't like `f` ...\n\nSometimes if you have mixed verbs with piping and you want to distinguish to proxies for different verbs:\n\n```python\n# you can just replicate f with a different name\ng = f\n\ndf = tibble(x=1, y=2)\ndf >> left_join(df >> group_by(f.x), by=g.y)\n```\n\nOr you can instantiate a new `Symbolic` object:\n```python\nfrom pipda.symbolic import Symbolic\n\ng = Symbolic()\n# assert f is g\n\n# f and g make no difference in execution technically\n```\n\nYou can also alias `f` by:\n```python\nfrom datar import f as g\n```\n"
  },
  {
    "path": "docs/import.md",
    "content": "## Import submodule, verbs and functions from datar\n\nYou can import everything (all verbs and functions) from datar by:\n```python\nfrom datar.all import *\n```\n\nwhich is not recommended. Instead, you can import individual verbs or functions by:\n```python\nfrom datar.all import mutate\n```\n\n!!! Attention\n\n    When you use `from datar.all import *`, you need to pay attention to the python builtin names that are covered by `datar` (will warn by default). For example, `slice` will be `datar.dplyr.slice` instead of `builtins.slice`. To refer to the builtin one, you need to:\n    ```python\n    import builtins\n\n    s = builtins.slice(None, 3, None) # [:3]\n    ```\n\nOr if you know the origin of the verb, you can also do:\n```python\nfrom datar.dplyr import mutate\n```\n\nYou can also keep the namespace:\n```python\nfrom datar import dplyr\n\n# df = tibble(x=1)\n# then use it with the dplyr namespace:\ndf >> dplyr.mutate(y=2)\n```\n\nIf you feel those namespaces are annoying, you can always use `datar.all`:\n```python\nfrom datar.all import mutate\n```\n\n## Import datasets from datar\n\n!!! note\n\n    Dataset has to be imported individually. This means  `from datar.datasets import *` won't work (you don't want all datasets to exhaust your memory).\n\nYou don't have to worry about other datasets to be imported and take up the memory when you import one. The dataset is only loaded into memory when you explictly import it individually.\n\nSee also [datasets](../datasets) for details about available datasets.\n\n## About python reserved names to be masked by `datar`\n\nSometimes it will be confusing especially when python builtin functions are overriden by `datar`. There are a couple of datar (`r-base`, `dplyr`) functions with the same name as python builtin functions. For example: `filter`, which is a python builtin function, but also a `dplyr` function. You should use `filter_` instead. By default, `datar` will raise an error when you try to import `filter`. You can set this option to `True` to allow this behavior.\n"
  },
  {
    "path": "docs/notebooks/across.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:57.831736Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:57.831017Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:58.963601Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:58.963983Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Facross.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ across</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"Apply the same transformation to multiple columns\\n\",\n       \"\\n\",\n       \"    The original API:\\n\",\n       \"    https://dplyr.tidyverse.org/reference/across.html\\n\",\n       \"\\n\",\n       \"    Examples:\\n\",\n       \"        #\\n\",\n       \"        >>> iris >> mutate(across(c(f.Sepal_Length, f.Sepal_Width), round))\\n\",\n       \"            Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"               <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"        0            5.0          4.0           1.4          0.2     setosa\\n\",\n       \"        1            5.0          3.0           1.4          0.2     setosa\\n\",\n       \"        ..           ...          ...           ...          ...        ...\\n\",\n       \"\\n\",\n       \"        >>> iris >> group_by(f.Species) >> summarise(\\n\",\n       \"        >>>     across(starts_with(\\\"Sepal\\\"), mean)\\n\",\n       \"        >>> )\\n\",\n       \"              Species  Sepal_Length  Sepal_Width\\n\",\n       \"             <object>     <float64>    <float64>\\n\",\n       \"        0      setosa         5.006        3.428\\n\",\n       \"        1  versicolor         5.936        2.770\\n\",\n       \"        2   virginica         6.588        2.974\\n\",\n       \"\\n\",\n       \"    Args:\\n\",\n       \"        _data: The dataframe.\\n\",\n       \"        *args: If given, the first 2 elements should be columns and functions\\n\",\n       \"            apply to each of the selected columns. The rest of them will be\\n\",\n       \"            the arguments for the functions.\\n\",\n       \"        _names: A glue specification that describes how to name\\n\",\n       \"            the output columns. This can use `{_col}` to stand for the\\n\",\n       \"            selected column name, and `{_fn}` to stand for the name of\\n\",\n       \"            the function being applied.\\n\",\n       \"            The default (None) is equivalent to `{_col}` for the\\n\",\n       \"            single function case and `{_col}_{_fn}` for the case where\\n\",\n       \"            a list is used for _fns. In such a case, `{_fn}` is 0-based.\\n\",\n       \"            To use 1-based index, use `{_fn1}`\\n\",\n       \"        _fn_context: Defines the context to evaluate the arguments for functions\\n\",\n       \"            if they are plain functions.\\n\",\n       \"            Note that registered functions will use its own context\\n\",\n       \"        **kwargs: Keyword arguments for the functions\\n\",\n       \"\\n\",\n       \"    Returns:\\n\",\n       \"        A dataframe with one column for each column and each function.\\n\",\n       \"    \"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ if_any</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Apply the same predicate function to a selection of columns and combine\\n\",\n       \"the results True if any element is True.  \\n\",\n       \"\\n\",\n       \"See Also:  \\n\",\n       \"&emsp;&emsp;[`across()`](datar.dplyr.across.across)  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ if_all</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Apply the same predicate function to a selection of columns and combine\\n\",\n       \"the results True if all elements are True.  \\n\",\n       \"\\n\",\n       \"See Also:  \\n\",\n       \"&emsp;&emsp;[`across()`](datar.dplyr.across.across)  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ c_across</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Apply the same transformation to multiple columns rowwisely\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`_cols`: The columns  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A rowwise tibble  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(across, if_any, if_all, c_across)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:58.975193Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:58.974632Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.039098Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.039487Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"1             5.0          3.0           1.4          0.2     setosa\\n\",\n       \"2             5.0          3.0           1.3          0.2     setosa\\n\",\n       \"3             5.0          3.0           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"145           7.0          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.0          2.0           5.0          1.9  virginica\\n\",\n       \"147           6.0          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.0          3.0           5.4          2.3  virginica\\n\",\n       \"149           6.0          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# round not changing dtypes (Series.round)\\n\",\n    \"iris >> mutate(across(c(f.Sepal_Length, f.Sepal_Width), round))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.064596Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.051917Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.071141Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.071735Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"1             5.0          3.0           1.4          0.2     setosa\\n\",\n       \"2             5.0          3.0           1.3          0.2     setosa\\n\",\n       \"3             5.0          3.0           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"145           7.0          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.0          2.0           5.0          1.9  virginica\\n\",\n       \"147           6.0          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.0          3.0           5.4          2.3  virginica\\n\",\n       \"149           6.0          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> mutate(across(c(0, 1), round))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.160629Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.159926Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.173929Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.174487Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.0          3.5           1.4          0.2     setosa\\n\",\n       \"1             5.0          3.0           1.4          0.2     setosa\\n\",\n       \"2             5.0          3.2           1.3          0.2     setosa\\n\",\n       \"3             5.0          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           7.0          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.0          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.0          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.0          3.4           5.4          2.3  virginica\\n\",\n       \"149           6.0          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# use slice with column names\\n\",\n    \"iris >> mutate(across(c[:f.Sepal_Width], round)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.189853Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.189233Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.203297Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.203820Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"1             5.0          3.0           1.4          0.2     setosa\\n\",\n       \"2             5.0          3.0           1.3          0.2     setosa\\n\",\n       \"3             5.0          3.0           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"145           7.0          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.0          2.0           5.0          1.9  virginica\\n\",\n       \"147           6.0          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.0          3.0           5.4          2.3  virginica\\n\",\n       \"149           6.0          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# to include stop of slice\\n\",\n    \"iris >> mutate(across(c[:f.Sepal_Width:1], round)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.216473Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.215938Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.261289Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.260707Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"1             5.0          3.0           1.4          0.2     setosa\\n\",\n       \"2             5.0          3.0           1.3          0.2     setosa\\n\",\n       \"3             5.0          3.0           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          4.0           1.4          0.2     setosa\\n\",\n       \"145           7.0          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.0          2.0           5.0          1.9  virginica\\n\",\n       \"147           6.0          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.0          3.0           5.4          2.3  virginica\\n\",\n       \"149           6.0          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> mutate(across(where(is_double) & ~c(f.Petal_Length, f.Petal_Width), round))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.285086Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.283416Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.288781Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.288298Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64> <category>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris = iris >> mutate(Species=as_factor(f.Species))\\n\",\n    \"iris\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.313067Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.312246Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.316329Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.316704Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris = iris >> mutate(across(where(is_factor), as_character))\\n\",\n    \"iris\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.323629Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.322970Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.430004Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.430376Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length  Sepal_Width\\n\",\n       \"     <object>     <float64>    <float64>\\n\",\n       \"0      setosa         5.006        3.428\\n\",\n       \"1  versicolor         5.936        2.770\\n\",\n       \"2   virginica         6.588        2.974\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), mean)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.476402Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.464178Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.489956Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.489325Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length_mean</th>\\n\",\n       \"      <th>Sepal_Length_sd</th>\\n\",\n       \"      <th>Sepal_Width_mean</th>\\n\",\n       \"      <th>Sepal_Width_sd</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>0.352490</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"      <td>0.379064</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>0.516171</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>0.313798</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>0.635880</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"      <td>0.322497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length_mean  Sepal_Length_sd  Sepal_Width_mean  \\\\\\n\",\n       \"     <object>          <float64>        <float64>         <float64>   \\n\",\n       \"0      setosa              5.006         0.352490             3.428   \\n\",\n       \"1  versicolor              5.936         0.516171             2.770   \\n\",\n       \"2   virginica              6.588         0.635880             2.974   \\n\",\n       \"\\n\",\n       \"   Sepal_Width_sd  \\n\",\n       \"        <float64>  \\n\",\n       \"0        0.379064  \\n\",\n       \"1        0.313798  \\n\",\n       \"2        0.322497  \"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), dict(mean=mean, sd=sd))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.535876Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.534904Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.540790Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.541269Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>mean_Sepal_Length</th>\\n\",\n       \"      <th>mean_Sepal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  mean_Sepal_Length  mean_Sepal_Width\\n\",\n       \"     <object>          <float64>         <float64>\\n\",\n       \"0      setosa              5.006             3.428\\n\",\n       \"1  versicolor              5.936             2.770\\n\",\n       \"2   virginica              6.588             2.974\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), mean, _names = \\\"mean_{_col}\\\")\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.603677Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.599601Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.632534Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.632981Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length.mean</th>\\n\",\n       \"      <th>Sepal_Length.sd</th>\\n\",\n       \"      <th>Sepal_Width.mean</th>\\n\",\n       \"      <th>Sepal_Width.sd</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>0.352490</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"      <td>0.379064</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>0.516171</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>0.313798</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>0.635880</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"      <td>0.322497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length.mean  Sepal_Length.sd  Sepal_Width.mean  \\\\\\n\",\n       \"     <object>          <float64>        <float64>         <float64>   \\n\",\n       \"0      setosa              5.006         0.352490             3.428   \\n\",\n       \"1  versicolor              5.936         0.516171             2.770   \\n\",\n       \"2   virginica              6.588         0.635880             2.974   \\n\",\n       \"\\n\",\n       \"   Sepal_Width.sd  \\n\",\n       \"        <float64>  \\n\",\n       \"0        0.379064  \\n\",\n       \"1        0.313798  \\n\",\n       \"2        0.322497  \"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), dict(mean=mean, sd=sd), _names = \\\"{_col}.{_fn}\\\")\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.656313Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.646789Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.685316Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.686236Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length.fn0</th>\\n\",\n       \"      <th>Sepal_Length.fn1</th>\\n\",\n       \"      <th>Sepal_Width.fn0</th>\\n\",\n       \"      <th>Sepal_Width.fn1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>0.352490</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"      <td>0.379064</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>0.516171</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>0.313798</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>0.635880</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"      <td>0.322497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length.fn0  Sepal_Length.fn1  Sepal_Width.fn0  \\\\\\n\",\n       \"     <object>         <float64>         <float64>        <float64>   \\n\",\n       \"0      setosa             5.006          0.352490            3.428   \\n\",\n       \"1  versicolor             5.936          0.516171            2.770   \\n\",\n       \"2   virginica             6.588          0.635880            2.974   \\n\",\n       \"\\n\",\n       \"   Sepal_Width.fn1  \\n\",\n       \"         <float64>  \\n\",\n       \"0         0.379064  \\n\",\n       \"1         0.313798  \\n\",\n       \"2         0.322497  \"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), [mean, sd], _names = \\\"{_col}.fn{_fn}\\\")\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.713809Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.707052Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.743071Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.742422Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length.fn0</th>\\n\",\n       \"      <th>Sepal_Length.fn1</th>\\n\",\n       \"      <th>Sepal_Width.fn0</th>\\n\",\n       \"      <th>Sepal_Width.fn1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>0.352490</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"      <td>0.379064</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>0.516171</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>0.313798</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>0.635880</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"      <td>0.322497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length.fn0  Sepal_Length.fn1  Sepal_Width.fn0  \\\\\\n\",\n       \"     <object>         <float64>         <float64>        <float64>   \\n\",\n       \"0      setosa             5.006          0.352490            3.428   \\n\",\n       \"1  versicolor             5.936          0.516171            2.770   \\n\",\n       \"2   virginica             6.588          0.635880            2.974   \\n\",\n       \"\\n\",\n       \"   Sepal_Width.fn1  \\n\",\n       \"         <float64>  \\n\",\n       \"0         0.379064  \\n\",\n       \"1         0.313798  \\n\",\n       \"2         0.322497  \"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(\\n\",\n    \"        starts_with(\\\"Sepal\\\"), \\n\",\n    \"        [mean, sd], \\n\",\n    \"        _names=\\\"{_col}.fn{_fn}\\\", \\n\",\n    \"    )\\n\",\n    \")\\n\",\n    \"# or use _fn0\\n\",\n    \"\\n\",\n    \"# iris >> group_by(f.Species) >> summarise(\\n\",\n    \"#     across(\\n\",\n    \"#         starts_with(\\\"Sepal\\\"), \\n\",\n    \"#         [mean, sd], \\n\",\n    \"#         _names=\\\"{_col}.fn{_fn1}\\\", # _fn1 for 1-based\\n\",\n    \"#     )\\n\",\n    \"# )\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.779281Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.765592Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.796747Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.797320Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal_Length.fn1</th>\\n\",\n       \"      <th>Sepal_Length.fn2</th>\\n\",\n       \"      <th>Sepal_Width.fn1</th>\\n\",\n       \"      <th>Sepal_Width.fn2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.006</td>\\n\",\n       \"      <td>0.352490</td>\\n\",\n       \"      <td>3.428</td>\\n\",\n       \"      <td>0.379064</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>5.936</td>\\n\",\n       \"      <td>0.516171</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>0.313798</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.588</td>\\n\",\n       \"      <td>0.635880</td>\\n\",\n       \"      <td>2.974</td>\\n\",\n       \"      <td>0.322497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species  Sepal_Length.fn1  Sepal_Length.fn2  Sepal_Width.fn1  \\\\\\n\",\n       \"     <object>         <float64>         <float64>        <float64>   \\n\",\n       \"0      setosa             5.006          0.352490            3.428   \\n\",\n       \"1  versicolor             5.936          0.516171            2.770   \\n\",\n       \"2   virginica             6.588          0.635880            2.974   \\n\",\n       \"\\n\",\n       \"   Sepal_Width.fn2  \\n\",\n       \"         <float64>  \\n\",\n       \"0         0.379064  \\n\",\n       \"1         0.313798  \\n\",\n       \"2         0.322497  \"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> group_by(f.Species) >> summarise(\\n\",\n    \"    across(starts_with(\\\"Sepal\\\"), [mean, sd], _names = \\\"{_col}.fn{_fn1}\\\")\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.844111Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.843152Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.848164Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.848519Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>4.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>5.5</td>\\n\",\n       \"      <td>4.2</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width  Species\\n\",\n       \"       <float64>    <float64>     <float64>    <float64> <object>\\n\",\n       \"15           5.7          4.4           1.5          0.4   setosa\\n\",\n       \"32           5.2          4.1           1.5          0.1   setosa\\n\",\n       \"33           5.5          4.2           1.4          0.2   setosa\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> filter(if_any(ends_with(\\\"Width\\\"), lambda x: x > 4))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.905288Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.904617Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.908420Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.908759Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>3.3</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>102</th>\\n\",\n       \"      <td>7.1</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>104</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.8</td>\\n\",\n       \"      <td>2.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>105</th>\\n\",\n       \"      <td>7.6</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.6</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>109</th>\\n\",\n       \"      <td>7.2</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>6.1</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>112</th>\\n\",\n       \"      <td>6.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.5</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>114</th>\\n\",\n       \"      <td>5.8</td>\\n\",\n       \"      <td>2.8</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>2.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>115</th>\\n\",\n       \"      <td>6.4</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>5.3</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>117</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>2.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>118</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>2.6</td>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>120</th>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>124</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.3</td>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>128</th>\\n\",\n       \"      <td>6.4</td>\\n\",\n       \"      <td>2.8</td>\\n\",\n       \"      <td>5.6</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>132</th>\\n\",\n       \"      <td>6.4</td>\\n\",\n       \"      <td>2.8</td>\\n\",\n       \"      <td>5.6</td>\\n\",\n       \"      <td>2.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>135</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.1</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>136</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.6</td>\\n\",\n       \"      <td>2.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>139</th>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>140</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>5.6</td>\\n\",\n       \"      <td>2.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>141</th>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>143</th>\\n\",\n       \"      <td>6.8</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>144</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.3</td>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"100           6.3          3.3           6.0          2.5  virginica\\n\",\n       \"102           7.1          3.0           5.9          2.1  virginica\\n\",\n       \"104           6.5          3.0           5.8          2.2  virginica\\n\",\n       \"105           7.6          3.0           6.6          2.1  virginica\\n\",\n       \"109           7.2          3.6           6.1          2.5  virginica\\n\",\n       \"112           6.8          3.0           5.5          2.1  virginica\\n\",\n       \"114           5.8          2.8           5.1          2.4  virginica\\n\",\n       \"115           6.4          3.2           5.3          2.3  virginica\\n\",\n       \"117           7.7          3.8           6.7          2.2  virginica\\n\",\n       \"118           7.7          2.6           6.9          2.3  virginica\\n\",\n       \"120           6.9          3.2           5.7          2.3  virginica\\n\",\n       \"124           6.7          3.3           5.7          2.1  virginica\\n\",\n       \"128           6.4          2.8           5.6          2.1  virginica\\n\",\n       \"132           6.4          2.8           5.6          2.2  virginica\\n\",\n       \"135           7.7          3.0           6.1          2.3  virginica\\n\",\n       \"136           6.3          3.4           5.6          2.4  virginica\\n\",\n       \"139           6.9          3.1           5.4          2.1  virginica\\n\",\n       \"140           6.7          3.1           5.6          2.4  virginica\\n\",\n       \"141           6.9          3.1           5.1          2.3  virginica\\n\",\n       \"143           6.8          3.2           5.9          2.3  virginica\\n\",\n       \"144           6.7          3.3           5.7          2.5  virginica\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> filter(if_all(ends_with(\\\"Width\\\"), lambda x: x > 2))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.920276Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.916671Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:00.168161Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:00.167035Z\"\n    },\n    \"tags\": []\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"      <th>w</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>sum</th>\\n\",\n       \"      <th>sd</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.909293</td>\\n\",\n       \"      <td>0.880456</td>\\n\",\n       \"      <td>0.174213</td>\\n\",\n       \"      <td>0.382593</td>\\n\",\n       \"      <td>1.963962</td>\\n\",\n       \"      <td>0.416324</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.102912</td>\\n\",\n       \"      <td>0.952811</td>\\n\",\n       \"      <td>0.632536</td>\\n\",\n       \"      <td>0.845920</td>\\n\",\n       \"      <td>1.688258</td>\\n\",\n       \"      <td>0.429225</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0.425592</td>\\n\",\n       \"      <td>0.320275</td>\\n\",\n       \"      <td>0.803515</td>\\n\",\n       \"      <td>0.831533</td>\\n\",\n       \"      <td>1.549382</td>\\n\",\n       \"      <td>0.254112</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0.218472</td>\\n\",\n       \"      <td>0.849190</td>\\n\",\n       \"      <td>0.637853</td>\\n\",\n       \"      <td>0.887980</td>\\n\",\n       \"      <td>1.705514</td>\\n\",\n       \"      <td>0.321026</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise:  (n=4)\"\n      ],\n      \"text/plain\": [\n       \"       id         w         x         y         z       sum        sd\\n\",\n       \"  <int64> <float64> <float64> <float64> <float64> <float64> <float64>\\n\",\n       \"0       1  0.909293  0.880456  0.174213  0.382593  1.963962  0.416324\\n\",\n       \"1       2  0.102912  0.952811  0.632536  0.845920  1.688258  0.429225\\n\",\n       \"2       3  0.425592  0.320275  0.803515  0.831533  1.549382  0.254112\\n\",\n       \"3       4  0.218472  0.849190  0.637853  0.887980  1.705514  0.321026\\n\",\n       \"[TibbleRowwise:  (n=4)]\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"    id=[1, 2, 3, 4],\\n\",\n    \"    w=runif(4), \\n\",\n    \"    x=runif(4), \\n\",\n    \"    y=runif(4), \\n\",\n    \"    z=runif(4)\\n\",\n    \")\\n\",\n    \"df >> rowwise() >> mutate(\\n\",\n    \"    sum = sum(c_across(c[f.w:f.z])),\\n\",\n    \"    sd = sd(c_across(c[f.w:f.z]))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/add_column.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.609283Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.607781Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:28.439771Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:28.440308Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fadd_column.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ add_column</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add one or more columns to an existing data frame.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: Data frame to append to  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs to add to the data frame  \\n\",\n       \"&emsp;&emsp;`_before`: and  \\n\",\n       \"&emsp;&emsp;`_after`: Column index or name where to add the new columns  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(default to add after the last column)  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_dtypes`: The dtypes for the new columns, either a uniform dtype or a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;dict of dtypes with keys the column names  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with the added columns  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tibble.tidyverse.org/reference/add_column.html\\n\",\n    \"\\n\",\n    \"from datar import f\\n\",\n    \"from datar.tibble import *\\n\",\n    \"from datar.base import seq\\n\",\n    \"from datar.core.names import NameNonUniqueError\\n\",\n    \"\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"nb_header(add_column)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:28.449685Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:28.449088Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:28.691135Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:28.691675Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>w</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>-1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y       z       w\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       1       3      -1       0\\n\",\n       \"1       2       2       0       0\\n\",\n       \"2       3       1       1       0\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=seq(1,3), y=seq(3,1))\\n\",\n    \"df >> add_column(z=seq(-1,1), w=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:28.701403Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:28.700765Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:28.726181Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:28.725600Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>-1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       z       y\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1      -1       3\\n\",\n       \"1       2       0       2\\n\",\n       \"2       3       1       1\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_column(z=seq(-1,1), _before=f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:28.734549Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:28.733777Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:28.751592Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:28.751990Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Names must be unique: x\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# You can't overwrite existing columns\\n\",\n    \"try:\\n\",\n    \"    df >> add_column(x = seq(4,6))\\n\",\n    \"except NameNonUniqueError as err:\\n\",\n    \"    print(err)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:28.760324Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:28.759646Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:28.776413Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:28.776819Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] Value has incompatible index.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# You can't create new observations\\n\",\n    \"with try_catch():\\n\",\n    \"    df >> add_column(z = seq(1,5))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/add_row.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:37.155229Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:37.154001Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.126642Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.126158Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fadd_row.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ add_row</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add one or more rows of data to an existing data frame.\\n\",\n       \"\\n\",\n       \"Aliases `add_case`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: Data frame to append to.  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs to add to the data frame.  \\n\",\n       \"&emsp;&emsp;`_before`: and  \\n\",\n       \"&emsp;&emsp;`_after`: row index where to add the new rows.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(default to add after the last row)  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with the added rows  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tibble.tidyverse.org/reference/add_row.html\\n\",\n    \"\\n\",\n    \"from datar.tibble import *\\n\",\n    \"from datar.base import seq\\n\",\n    \"\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"nb_header(add_row)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.136586Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.135976Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.352815Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.353207Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       3\\n\",\n       \"1       2       2\\n\",\n       \"2       3       1\\n\",\n       \"3       4       0\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=seq(1,3), y=seq(3,1))\\n\",\n    \"\\n\",\n    \"df >> add_row(x=4, y=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.358707Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.358197Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.384681Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.385116Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       3\\n\",\n       \"1       2       2\\n\",\n       \"2       4       0\\n\",\n       \"3       3       1\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_row(x=4, y=0, _before=2) # 0-based\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.391117Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.390590Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.413779Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.412299Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>-1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       3\\n\",\n       \"1       2       2\\n\",\n       \"2       3       1\\n\",\n       \"3       4       0\\n\",\n       \"4       5      -1\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_row(x=[4,5], y=[0,-1])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.424155Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.423508Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.462307Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.461644Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       3\\n\",\n       \"1       2       2\\n\",\n       \"2       3       1\\n\",\n       \"3       4       0\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_row(tibble_row(x = 4, y = 0))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.468293Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.467594Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.490614Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.490121Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x         y\\n\",\n       \"  <int64> <float64>\\n\",\n       \"0       1       3.0\\n\",\n       \"1       2       2.0\\n\",\n       \"2       3       1.0\\n\",\n       \"3       4       NaN\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Absent variables get missing values\\n\",\n    \"df >> add_row(x = 4)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:38.496679Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:38.495337Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:38.510857Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:38.510477Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] New rows can't add columns: ['z']\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# You can't create new variables\\n\",\n    \"with try_catch():\\n\",\n    \"    df >> add_row(z = 10)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.7.8 64-bit ('base': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/arrange.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.284608Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.283990Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.422024Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.420765Z\"\n    },\n    \"tags\": []\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Farrange.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ arrange</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### orders the rows of a data frame by the values of selected columns.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/arrange.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*series`: Variables, or functions of variables.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use desc() to sort a variable in descending order.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_by_group`: If TRUE, will sort first by grouping variable.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Applies to grouped data frames only.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs that apply with mutate  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An object of the same type as _data.  \\n\",\n       \"&emsp;&emsp;The output has the following properties:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;All rows appear in the output, but (usually) in a different place.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Columns are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Groups are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Data frame attributes are preserved.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.data import mtcars, iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(arrange)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.459542Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.458987Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.666964Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.667381Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Datsun 710               22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Mazda RX4                21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag            21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Hornet 4 Drive           21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Datsun 710              18.61       1       1       4       1  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Mazda RX4               16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag           17.02       0       1       4       4  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Hornet 4 Drive          19.44       1       0       3       1  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"arrange(mtcars, f.cyl, f.disp)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.702043Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.701441Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.708757Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.709182Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Hornet 4 Drive           21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Mazda RX4                21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag            21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Datsun 710               22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Hornet 4 Drive          19.44       1       0       3       1  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Mazda RX4               16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag           17.02       0       1       4       4  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Datsun 710              18.61       1       1       4       1  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> arrange(desc(f.disp))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.765555Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.761172Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.771559Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.771941Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"1       14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"2       10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"3       16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"4       19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"5       13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"6       15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"7       17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"8       15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"9       14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"10      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"11      18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"12      19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"13      18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"14      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"15      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"16      21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"17      24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"18      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"19      22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"20      21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"21      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"22      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"23      21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"24      21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"25      22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"26      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"27      26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"28      27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"29      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"30      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"31      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        0       3       4  \\n\",\n       \"1        0       3       4  \\n\",\n       \"2        0       3       4  \\n\",\n       \"3        0       3       3  \\n\",\n       \"4        0       3       2  \\n\",\n       \"5        0       3       4  \\n\",\n       \"6        0       3       3  \\n\",\n       \"7        0       3       3  \\n\",\n       \"8        1       5       8  \\n\",\n       \"9        0       3       4  \\n\",\n       \"10       0       3       2  \\n\",\n       \"11       0       3       1  \\n\",\n       \"12       0       4       4  \\n\",\n       \"13       0       3       2  \\n\",\n       \"14       0       4       4  \\n\",\n       \"15       0       3       2  \\n\",\n       \"16       0       3       1  \\n\",\n       \"17       0       4       2  \\n\",\n       \"18       1       5       4  \\n\",\n       \"19       0       4       2  \\n\",\n       \"20       1       4       4  \\n\",\n       \"21       1       4       2  \\n\",\n       \"22       1       5       6  \\n\",\n       \"23       1       4       4  \\n\",\n       \"24       0       3       1  \\n\",\n       \"25       1       4       1  \\n\",\n       \"26       1       4       1  \\n\",\n       \"27       1       5       2  \\n\",\n       \"28       1       4       1  \\n\",\n       \"29       1       4       1  \\n\",\n       \"30       1       4       2  \\n\",\n       \"31       1       5       2  \\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl = mtcars >> group_by(f.cyl)\\n\",\n    \"by_cyl >> arrange(desc(f.wt)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.885725Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.885074Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.930266Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.933444Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"1       22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"2       21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"3       21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"4       22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"5       32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"6       26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"7       27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"8       33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"9       30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"10      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"11      18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"12      19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"13      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"14      21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"15      21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"16      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"17      21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"18      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"19      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"20      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"21      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"22      19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"23      13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"24      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"25      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"26      14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"27      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"28      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"29      18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"30      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"31      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        0       4       2  \\n\",\n       \"1        0       4       2  \\n\",\n       \"2        1       4       2  \\n\",\n       \"3        0       3       1  \\n\",\n       \"4        1       4       1  \\n\",\n       \"5        1       4       1  \\n\",\n       \"6        1       5       2  \\n\",\n       \"7        1       4       1  \\n\",\n       \"8        1       4       1  \\n\",\n       \"9        1       4       2  \\n\",\n       \"10       1       5       2  \\n\",\n       \"11       0       3       1  \\n\",\n       \"12       0       4       4  \\n\",\n       \"13       0       4       4  \\n\",\n       \"14       0       3       1  \\n\",\n       \"15       1       4       4  \\n\",\n       \"16       1       5       6  \\n\",\n       \"17       1       4       4  \\n\",\n       \"18       0       3       4  \\n\",\n       \"19       0       3       4  \\n\",\n       \"20       0       3       4  \\n\",\n       \"21       0       3       3  \\n\",\n       \"22       0       3       2  \\n\",\n       \"23       0       3       4  \\n\",\n       \"24       0       3       3  \\n\",\n       \"25       0       3       3  \\n\",\n       \"26       0       3       4  \\n\",\n       \"27       1       5       8  \\n\",\n       \"28       0       3       2  \\n\",\n       \"29       0       3       2  \\n\",\n       \"30       0       3       2  \\n\",\n       \"31       1       5       4  \\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> arrange(desc(f.wt), _by_group=True) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.971525Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.970960Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.983870Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.984279Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Mazda RX4                21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag            21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Hornet 4 Drive           21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Datsun 710               22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Mazda RX4               16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag           17.02       0       1       4       4  \\n\",\n       \"Hornet 4 Drive          19.44       1       0       3       1  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Datsun 710              18.61       1       1       4       1  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# use subscription for f-expression\\n\",\n    \"def tidy_eval_arrange(_data, var):\\n\",\n    \"  return _data >> arrange(f[var])\\n\",\n    \"  \\n\",\n    \"tidy_eval_arrange(mtcars, 'mpg')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.025786Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.025219Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.034157Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.035035Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.1</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>2.9</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>4.5</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>118</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>2.6</td>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>122</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>2.8</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>135</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.1</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>117</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>2.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>131</th>\\n\",\n       \"      <td>7.9</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>6.4</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"13            4.3          3.0           1.1          0.1     setosa\\n\",\n       \"8             4.4          2.9           1.4          0.2     setosa\\n\",\n       \"38            4.4          3.0           1.3          0.2     setosa\\n\",\n       \"42            4.4          3.2           1.3          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"41            4.5          2.3           1.3          0.3     setosa\\n\",\n       \"118           7.7          2.6           6.9          2.3  virginica\\n\",\n       \"122           7.7          2.8           6.7          2.0  virginica\\n\",\n       \"135           7.7          3.0           6.1          2.3  virginica\\n\",\n       \"117           7.7          3.8           6.7          2.2  virginica\\n\",\n       \"131           7.9          3.8           6.4          2.0  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> arrange(across(starts_with(\\\"Sepal\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.068181Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.067601Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.094667Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.095672Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>131</th>\\n\",\n       \"      <td>7.9</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>6.4</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>117</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>2.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>135</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.1</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>122</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>2.8</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>118</th>\\n\",\n       \"      <td>7.7</td>\\n\",\n       \"      <td>2.6</td>\\n\",\n       \"      <td>6.9</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>4.5</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>2.9</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.1</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"131           7.9          3.8           6.4          2.0  virginica\\n\",\n       \"117           7.7          3.8           6.7          2.2  virginica\\n\",\n       \"135           7.7          3.0           6.1          2.3  virginica\\n\",\n       \"122           7.7          2.8           6.7          2.0  virginica\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"118           7.7          2.6           6.9          2.3  virginica\\n\",\n       \"41            4.5          2.3           1.3          0.3     setosa\\n\",\n       \"42            4.4          3.2           1.3          0.2     setosa\\n\",\n       \"38            4.4          3.0           1.3          0.2     setosa\\n\",\n       \"8             4.4          2.9           1.4          0.2     setosa\\n\",\n       \"13            4.3          3.0           1.1          0.1     setosa\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> arrange(across(starts_with(\\\"Sepal\\\"), desc))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/base-arithmetic.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fsum_.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ sum_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the sum of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The sum of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ prod</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the product of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The product of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ mean</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the mean of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The mean of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ median</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the median of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The median of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ min_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the minimum of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The minimum of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ max_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the maximum of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The maximum of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ var</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the variance of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`y`: None or a vector, matrix or data frame with  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;compatible dimensions to `x`.  The default is equivalent to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`y = x`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"&emsp;&emsp;`ddof`: The degrees of freedom  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The variance of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pmin</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Returns the (regular or Parallel) maxima and minima of the input\\n\",\n       \"&emsp;&emsp;values.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`more`: One or more values  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The minimum of the vector and the values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pmax</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Returns the (regular or Parallel) maxima and minima of the input\\n\",\n       \"&emsp;&emsp;values.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`more`: One or more values  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The maximum of the vector and the values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ round_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Round the values of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`digits`: The number of digits to round to  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The rounded values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ sqrt</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the square root of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The square root of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ abs_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the absolute value of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The absolute values of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ sign</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the sign of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The signs of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ trunc</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Truncate the values of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The truncated values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ ceiling</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Round up to the nearest integer\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The value to be rounded up  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The rounded up value  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ floor</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Round down to the nearest integer\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The value to be rounded down  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The rounded down value  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ signif</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Round the values of a vector to a given number of significant digits\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`digits`: The number of significant digits to round to  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The rounded values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ log</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the logarithm of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`base`: The base of the logarithm  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The logarithm values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ exp</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the exponential of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The exponential values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ log2</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the base-2 logarithm of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The logarithm values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ log10</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the base 10 logarithm of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The logarithm values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ log1p</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the logarithm of one plus a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The logarithm values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cov</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute pairwise covariance between two variables\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: a numeric vector, matrix or data frame.  \\n\",\n       \"&emsp;&emsp;`y`: None or a vector, matrix or data frame with  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;compatible dimensions to `x`.  The default is equivalent to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`y = x`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_rm`: If `True`, remove missing values before computing  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;the covariance.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`ddof`: The denominator degrees of freedom.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The covariance matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ scale</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Center and/or scale the data\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`center`: Whether to center the data  \\n\",\n       \"&emsp;&emsp;`scale_`: Whether to scale the data  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The scaled data  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ col_sums</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the column sums of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The column sums of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ row_sums</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the row sums of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row sums of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ col_means</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the column means of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The column means of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ row_means</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the row means of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row means of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ col_sds</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the column standard deviations of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The column standard deviations of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ row_sds</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the row standard deviations of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row standard deviations of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ col_medians</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the column medians of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The column medians of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ row_medians</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the row medians of a matrix\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric matrix  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row medians of the matrix  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ quantile</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the quantiles of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`probs`: The probabilities to use  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The quantiles of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ sd</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the standard deviation of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The standard deviation of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ weighted_mean</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Compute the weighted mean of a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`w`: The weights to use  \\n\",\n       \"&emsp;&emsp;`na_rm`: Whether to remove `NA` values  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The weighted mean of the vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"debug_kwargs = {'prefix': '\\\\n', 'sep': f'\\\\n{\\\"-\\\" * 20}\\\\n'}\\n\",\n    \"nb_header(\\n\",\n    \"    sum, prod, mean, median, min, max, var, pmin, pmax,\\n\",\n    \"    round, sqrt, abs, sign, trunc, ceiling, floor, signif,\\n\",\n    \"    log, exp, log2, log10, log1p, cov, scale, col_sums,\\n\",\n    \"    row_sums, col_means, row_means, col_sds, row_sds,\\n\",\n    \"    col_medians, row_medians, quantile, sd, weighted_mean\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"sum([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"13\\n\",\n      \"\\n\",\n      \"prod([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"48\\n\",\n      \"\\n\",\n      \"mean([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"3.25\\n\",\n      \"\\n\",\n      \"median([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"3.0\\n\",\n      \"\\n\",\n      \"min([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"1\\n\",\n      \"\\n\",\n      \"max([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"6\\n\",\n      \"\\n\",\n      \"var([1,2,4,6])\\n\",\n      \"--------------------\\n\",\n      \"4.916666666666667\\n\",\n      \"\\n\",\n      \"pmin([1,4], [2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 3])\\n\",\n      \"\\n\",\n      \"pmax([1,4], [2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([2, 4])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"\\n\",\n    \"debug(\\n\",\n    \"    sum([1,2,4,6]),\\n\",\n    \"    prod([1,2,4,6]),\\n\",\n    \"    mean([1,2,4,6]),\\n\",\n    \"    median([1,2,4,6]),\\n\",\n    \"    min([1,2,4,6]),\\n\",\n    \"    max([1,2,4,6]),\\n\",\n    \"    var([1,2,4,6]),\\n\",\n    \"    pmin([1,4], [2,3]),\\n\",\n    \"    pmax([1,4], [2,3]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"round([1.4, 1.5])\\n\",\n      \"--------------------\\n\",\n      \"array([1., 2.])\\n\",\n      \"\\n\",\n      \"sqrt([1.1, 2.1])\\n\",\n      \"--------------------\\n\",\n      \"array([1.04880885, 1.44913767])\\n\",\n      \"\\n\",\n      \"abs([1, -1])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 1])\\n\",\n      \"\\n\",\n      \"sign([10, -10])\\n\",\n      \"--------------------\\n\",\n      \"array([ 1, -1])\\n\",\n      \"\\n\",\n      \"trunc([1.1, 2.1])\\n\",\n      \"--------------------\\n\",\n      \"array([1., 2.])\\n\",\n      \"\\n\",\n      \"ceiling([1.1, 2.1])\\n\",\n      \"--------------------\\n\",\n      \"array([2., 3.])\\n\",\n      \"\\n\",\n      \"floor([1.1, 2.1])\\n\",\n      \"--------------------\\n\",\n      \"array([1., 2.])\\n\",\n      \"\\n\",\n      \"signif(3.14567e-10, 3)\\n\",\n      \"--------------------\\n\",\n      \"array(3.15e-10)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"debug(\\n\",\n    \"    round([1.4, 1.5]),\\n\",\n    \"    sqrt([1.1, 2.1]),\\n\",\n    \"    abs([1, -1]),\\n\",\n    \"    sign([10, -10]),\\n\",\n    \"    trunc([1.1, 2.1]),\\n\",\n    \"    ceiling([1.1, 2.1]),\\n\",\n    \"    floor([1.1, 2.1]),\\n\",\n    \"    signif(3.14567e-10, 3),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"log(exp(2))\\n\",\n      \"--------------------\\n\",\n      \"2.0\\n\",\n      \"\\n\",\n      \"exp(2)\\n\",\n      \"--------------------\\n\",\n      \"7.38905609893065\\n\",\n      \"\\n\",\n      \"log2(4)\\n\",\n      \"--------------------\\n\",\n      \"2.0\\n\",\n      \"\\n\",\n      \"log10(100)\\n\",\n      \"--------------------\\n\",\n      \"2.0\\n\",\n      \"\\n\",\n      \"log1p(exp(1)-1)\\n\",\n      \"--------------------\\n\",\n      \"1.0\\n\",\n      \"\\n\",\n      \"cov([1, 2, 3], [3, 2, 1])\\n\",\n      \"--------------------\\n\",\n      \"-1.0\\n\",\n      \"\\n\",\n      \"scale([1, 2, 3])\\n\",\n      \"--------------------\\n\",\n      \"array([-1.,  0.,  1.])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"debug(\\n\",\n    \"    log(exp(2)),\\n\",\n    \"    exp(2),\\n\",\n    \"    log2(4),\\n\",\n    \"    log10(100),\\n\",\n    \"    log1p(exp(1)-1),\\n\",\n    \"    cov([1, 2, 3], [3, 2, 1]),\\n\",\n    \"    scale([1, 2, 3]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"df\\n\",\n      \"--------------------\\n\",\n      \"         v1        v2        v3\\n\",\n      \"  <float64> <float64> <float64>\\n\",\n      \"0  0.067273  0.015561 -0.633373\\n\",\n      \"1 -0.911285  1.526871  0.540873\\n\",\n      \"2  1.140124 -0.596385  1.933209\\n\",\n      \"3 -0.147867 -0.945199  0.994281\\n\",\n      \"4 -2.492679 -1.536482 -0.473660\\n\",\n      \"\\n\",\n      \"col_sums(df)\\n\",\n      \"--------------------\\n\",\n      \"v1   -2.344435\\n\",\n      \"v2   -1.535634\\n\",\n      \"v3    2.361329\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"row_sums(df)\\n\",\n      \"--------------------\\n\",\n      \"0   -0.550539\\n\",\n      \"1    1.156458\\n\",\n      \"2    2.476947\\n\",\n      \"3   -0.098786\\n\",\n      \"4   -4.502821\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"col_means(df)\\n\",\n      \"--------------------\\n\",\n      \"v1   -0.468887\\n\",\n      \"v2   -0.307127\\n\",\n      \"v3    0.472266\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"row_means(df)\\n\",\n      \"--------------------\\n\",\n      \"0   -0.183513\\n\",\n      \"1    0.385486\\n\",\n      \"2    0.825649\\n\",\n      \"3   -0.032929\\n\",\n      \"4   -1.500940\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"col_sds(df)\\n\",\n      \"--------------------\\n\",\n      \"v1    1.348229\\n\",\n      \"v2    1.169380\\n\",\n      \"v3    1.064046\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"row_sds(df)\\n\",\n      \"--------------------\\n\",\n      \"0    0.390447\\n\",\n      \"1    1.226483\\n\",\n      \"2    1.293786\\n\",\n      \"3    0.974835\\n\",\n      \"4    1.009978\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"col_medians(df)\\n\",\n      \"--------------------\\n\",\n      \"v1   -0.147867\\n\",\n      \"v2   -0.596385\\n\",\n      \"v3    0.540873\\n\",\n      \"dtype: float64\\n\",\n      \"\\n\",\n      \"row_medians(df)\\n\",\n      \"--------------------\\n\",\n      \"0    0.015561\\n\",\n      \"1    0.540873\\n\",\n      \"2    1.140124\\n\",\n      \"3   -0.147867\\n\",\n      \"4   -1.536482\\n\",\n      \"dtype: float64\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# column and row stats\\n\",\n    \"\\n\",\n    \"df = tribble(f.v1, f.v2, f.v3, *rnorm(15))\\n\",\n    \"debug(\\n\",\n    \"    df,\\n\",\n    \"    col_sums(df),\\n\",\n    \"    row_sums(df),\\n\",\n    \"    col_means(df),\\n\",\n    \"    row_means(df),\\n\",\n    \"    col_sds(df),\\n\",\n    \"    row_sds(df),\\n\",\n    \"    col_medians(df),\\n\",\n    \"    row_medians(df),\\n\",\n    \"    **debug_kwargs,\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"quantile([1, 2, 3, 4, 5])\\n\",\n      \"--------------------\\n\",\n      \"array([1., 2., 3., 4., 5.])\\n\",\n      \"\\n\",\n      \"quantile([1, 2, 3, 4, 5], [0, 1])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 5])\\n\",\n      \"\\n\",\n      \"sd([1, 2, 3, 4, 5])\\n\",\n      \"--------------------\\n\",\n      \"1.5811388300841898\\n\",\n      \"\\n\",\n      \"weighted_mean([1, 2, 3, 4, 5])\\n\",\n      \"--------------------\\n\",\n      \"3.0\\n\",\n      \"\\n\",\n      \"weighted_mean([1, 2, 3, 4, 5], [5, 4, 3, 2, 1])\\n\",\n      \"--------------------\\n\",\n      \"2.3333333333333335\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"debug(\\n\",\n    \"    quantile([1, 2, 3, 4, 5]),\\n\",\n    \"    quantile([1, 2, 3, 4, 5], [0, 1]),\\n\",\n    \"    sd([1, 2, 3, 4, 5]),\\n\",\n    \"    weighted_mean([1, 2, 3, 4, 5]),\\n\",\n    \"    weighted_mean([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]),\\n\",\n    \"    **debug_kwargs,\\n\",\n    \")\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/base-funs.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcut.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cut</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Cut a numeric vector into bins\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`breaks`: The breaks  \\n\",\n       \"&emsp;&emsp;`labels`: The labels  \\n\",\n       \"&emsp;&emsp;`include_lowest`: Whether to include the lowest value  \\n\",\n       \"&emsp;&emsp;`right`: Whether to include the rightmost value  \\n\",\n       \"&emsp;&emsp;`dig_lab`: The number of digits for labels  \\n\",\n       \"&emsp;&emsp;`ordered_result`: Whether to return an ordered factor  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ diff</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Difference of a numeric vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`lag`: The lag to use. Could be negative.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;It always calculates `x[lag:] - x[:-lag]` even when `lag` is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;negative  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`differences`: The order of the difference  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of `x[lag:] – x[:-lag]`.  \\n\",\n       \"&emsp;&emsp;If `differences > 1`, the rule applies `differences` times on `x`  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ identity</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Identity function\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The same vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ expand_grid</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Expand a grid\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`*args`: Additional numeric vectors  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Additional keyword arguments  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The expanded grid  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ outer</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Outer product of two vectors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`y`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`fun`: The function to handle how the result of the elements from  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;the first and second vectors should be computed.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The function has to be vectorized at the second argument, and  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;return the same shape as y.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The outer product  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ make_names</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Make names for a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`names`: character vector to be coerced to syntactically valid names.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This is coerced to character if necessary.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`unique`: Whether to make the names unique  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The names  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ make_unique</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Make a vector unique\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`names`: a character vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The unique vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rank</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Rank a numeric vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_last`: Whether to put NA at the end  \\n\",\n       \"&emsp;&emsp;`ties_method`: The method to handle ties. One of \\\"average\\\", \\\"first\\\",  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"last\\\", \\\"random\\\", \\\"max\\\", \\\"min\\\"  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The ranks  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"debug_kwargs = {'prefix': '\\\\n', 'sep': f'\\\\n{\\\"-\\\" * 20}\\\\n'}\\n\",\n    \"nb_header(\\n\",\n    \"    cut, diff, identity, expand_grid, outer, \\n\",\n    \"    make_names, make_unique, rank,\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 13:26:45][datar][WARNING] New names:\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_1' -> '__0'\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_2' -> '__1'\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_3' -> '__2'\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] New names:\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_1' -> '__0'\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_1' -> '__1'\\n\",\n      \"[2022-12-02 13:26:45][datar][WARNING] * '_1' -> '__2'\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"cut(seq(1,10), 3)\\n\",\n      \"--------------------\\n\",\n      \"[(0.99, 4.0], (0.99, 4.0], (0.99, 4.0], (0.99, 4.0], (4.0, 7.0], (4.0, 7.0], (4.0, 7.0], (7.0, 10.0], (7.0, 10.0], (7.0, 10.0]]\\n\",\n      \"Categories (3, interval[float64, right]): [(0.99, 4.0] < (4.0, 7.0] < (7.0, 10.0]]\\n\",\n      \"\\n\",\n      \"diff([1, 2, 3])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 1])\\n\",\n      \"\\n\",\n      \"identity(1.23)\\n\",\n      \"--------------------\\n\",\n      \"1.23\\n\",\n      \"\\n\",\n      \"expand_grid([1,2], [3,4])\\n\",\n      \"--------------------\\n\",\n      \"   _VAR_0  _VAR_1\\n\",\n      \"  <int64> <int64>\\n\",\n      \"0       1       3\\n\",\n      \"1       1       4\\n\",\n      \"2       2       3\\n\",\n      \"3       2       4\\n\",\n      \"\\n\",\n      \"outer([1,2], [3,4])\\n\",\n      \"--------------------\\n\",\n      \"        0       1\\n\",\n      \"  <int64> <int64>\\n\",\n      \"0       3       4\\n\",\n      \"1       6       8\\n\",\n      \"\\n\",\n      \"make_names([1, 2, 3])\\n\",\n      \"--------------------\\n\",\n      \"['__0', '__1', '__2']\\n\",\n      \"\\n\",\n      \"make_unique([1, 1, 1])\\n\",\n      \"--------------------\\n\",\n      \"['__0', '__1', '__2']\\n\",\n      \"\\n\",\n      \"rank([3, 4, 1, -1])\\n\",\n      \"--------------------\\n\",\n      \"array([3., 4., 2., 1.])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"debug(\\n\",\n    \"    cut(seq(1,10), 3), \\n\",\n    \"    diff([1, 2, 3]),\\n\",\n    \"    identity(1.23),\\n\",\n    \"    expand_grid([1,2], [3,4]),\\n\",\n    \"    outer([1,2], [3,4]),\\n\",\n    \"    make_names([1, 2, 3]),\\n\",\n    \"    make_unique([1, 1, 1]),\\n\",\n    \"    rank([3, 4, 1, -1]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/base.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"453624fc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.263092Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.262361Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.079093Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.079498Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"import numpy\\n\",\n    \"from datar import f\\n\",\n    \"from datar.base import *\\n\",\n    \"from datar.tibble import tibble\\n\",\n    \"\\n\",\n    \"debug_kwargs = {'prefix': '\\\\n', 'sep': f'\\\\n{\\\"-\\\" * 20}\\\\n'}\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"5d888318\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.084436Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.083689Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.184011Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.184453Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"pi\\n\",\n      \"--------------------\\n\",\n      \"3.141592653589793\\n\",\n      \"\\n\",\n      \"Inf\\n\",\n      \"--------------------\\n\",\n      \"inf\\n\",\n      \"\\n\",\n      \"letters\\n\",\n      \"--------------------\\n\",\n      \"array(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',\\n\",\n      \"       'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'],\\n\",\n      \"      dtype='<U1')\\n\",\n      \"\\n\",\n      \"LETTERS\\n\",\n      \"--------------------\\n\",\n      \"array(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\\n\",\n      \"       'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'],\\n\",\n      \"      dtype='<U1')\\n\",\n      \"\\n\",\n      \"month_abb\\n\",\n      \"--------------------\\n\",\n      \"array(['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\\n\",\n      \"       'Oct', 'Nov', 'Dec'], dtype='<U3')\\n\",\n      \"\\n\",\n      \"month_name\\n\",\n      \"--------------------\\n\",\n      \"array(['January', 'February', 'March', 'April', 'May', 'June', 'July',\\n\",\n      \"       'August', 'September', 'October', 'November', 'December'],\\n\",\n      \"      dtype='<U9')\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# constants\\n\",\n    \"debug(\\n\",\n    \"    pi,\\n\",\n    \"    Inf,\\n\",\n    \"    letters,\\n\",\n    \"    LETTERS,\\n\",\n    \"    month_abb,\\n\",\n    \"    month_name,\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"c6ac03cf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.354757Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.354104Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.653877Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.654309Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"colnames(df)\\n\",\n      \"--------------------\\n\",\n      \"array(['x', 'y', 'z'], dtype=object)\\n\",\n      \"\\n\",\n      \"colnames(df, ['a', 'b', 'c'])\\n\",\n      \"--------------------\\n\",\n      \"array(['x', 'y', 'z'], dtype=object)\\n\",\n      \"\\n\",\n      \"rownames(df)\\n\",\n      \"--------------------\\n\",\n      \"array([0])\\n\",\n      \"\\n\",\n      \"set_rownames(df, ['row1'])\\n\",\n      \"--------------------\\n\",\n      \"           x       y       z\\n\",\n      \"     <int64> <int64> <int64>\\n\",\n      \"row1       1       2       3\\n\",\n      \"\\n\",\n      \"dim(df)\\n\",\n      \"--------------------\\n\",\n      \"(1, 3)\\n\",\n      \"\\n\",\n      \"nrow(df)\\n\",\n      \"--------------------\\n\",\n      \"1\\n\",\n      \"\\n\",\n      \"ncol(df)\\n\",\n      \"--------------------\\n\",\n      \"3\\n\",\n      \"\\n\",\n      \"diag(1, 3)\\n\",\n      \"--------------------\\n\",\n      \"        0       1       2\\n\",\n      \"  <int64> <int64> <int64>\\n\",\n      \"0       1       0       0\\n\",\n      \"1       0       1       0\\n\",\n      \"2       0       0       1\\n\",\n      \"\\n\",\n      \"diag(diag(1, 3))\\n\",\n      \"--------------------\\n\",\n      \"array([1, 1, 1])\\n\",\n      \"\\n\",\n      \"t(df)\\n\",\n      \"--------------------\\n\",\n      \"        0\\n\",\n      \"  <int64>\\n\",\n      \"x       1\\n\",\n      \"y       2\\n\",\n      \"z       3\\n\",\n      \"\\n\",\n      \"intersect([1,2], [2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([2])\\n\",\n      \"\\n\",\n      \"setdiff([1,2], [2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([1])\\n\",\n      \"\\n\",\n      \"union([1,2], [2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2, 3])\\n\",\n      \"\\n\",\n      \"setequal([1,2], [2,1])\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"duplicated([1,1,2,2])\\n\",\n      \"--------------------\\n\",\n      \"array([False,  True, False,  True])\\n\",\n      \"\\n\",\n      \"duplicated([1,1,2,2], from_last=True)\\n\",\n      \"--------------------\\n\",\n      \"array([ True, False,  True, False])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# verbs\\n\",\n    \"df = tibble(x=1, y=2, z=3)\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    colnames(df),\\n\",\n    \"    colnames(df, ['a', 'b', 'c']),\\n\",\n    \"    rownames(df),\\n\",\n    \"    set_rownames(df, ['row1']),\\n\",\n    \"    dim(df),\\n\",\n    \"    nrow(df),\\n\",\n    \"    ncol(df),\\n\",\n    \"    diag(1, 3),\\n\",\n    \"    diag(diag(1, 3)),\\n\",\n    \"    t(df),\\n\",\n    \"    intersect([1,2], [2,3]),\\n\",\n    \"    setdiff([1,2], [2,3]),\\n\",\n    \"    union([1,2], [2,3]),\\n\",\n    \"    setequal([1,2], [2,1]),\\n\",\n    \"    duplicated([1,1,2,2]),\\n\",\n    \"    duplicated([1,1,2,2], from_last=True),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"b16d91c0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.935879Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.935027Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.089544Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.089118Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"bessel_i([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([0.5651591 , 1.59063685, 3.95337022])\\n\",\n      \"\\n\",\n      \"bessel_j([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([0.44005059, 0.57672481, 0.33905896])\\n\",\n      \"\\n\",\n      \"bessel_k([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([0.60190723, 0.13986588, 0.04015643])\\n\",\n      \"\\n\",\n      \"bessel_y([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([-0.78121282, -0.10703243,  0.32467442])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# bessel\\n\",\n    \"debug(\\n\",\n    \"    bessel_i([1,2,3], 1),\\n\",\n    \"    bessel_j([1,2,3], 1),\\n\",\n    \"    bessel_k([1,2,3], 1),\\n\",\n    \"    bessel_y([1,2,3], 1),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"31c3ce8d\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.103826Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.103131Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.117362Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.117944Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"as_integer([1, 2.1])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2])\\n\",\n      \"\\n\",\n      \"as_double(['1', 2, 'nan'])\\n\",\n      \"--------------------\\n\",\n      \"array([ 1.,  2., nan])\\n\",\n      \"\\n\",\n      \"as_numeric(['1', 2, 'nan'])\\n\",\n      \"--------------------\\n\",\n      \"array([ 1.,  2., nan])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# casting\\n\",\n    \"debug(\\n\",\n    \"    as_integer([1, 2.1]),\\n\",\n    \"    as_double(['1', 2, 'nan']),\\n\",\n    \"    as_numeric(['1', 2, 'nan']),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"aa15cc6b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.138109Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.137450Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.151939Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.151185Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"im(cm)\\n\",\n      \"--------------------\\n\",\n      \"2.0\\n\",\n      \"\\n\",\n      \"re(cm)\\n\",\n      \"--------------------\\n\",\n      \"1.0\\n\",\n      \"\\n\",\n      \"mod(cm)\\n\",\n      \"--------------------\\n\",\n      \"2.23606797749979\\n\",\n      \"\\n\",\n      \"conj(cm)\\n\",\n      \"--------------------\\n\",\n      \"(1-2j)\\n\",\n      \"\\n\",\n      \"is_complex(cm)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"as_complex(1)\\n\",\n      \"--------------------\\n\",\n      \"(1+0j)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# complex numbers\\n\",\n    \"cm = 1 + 2j\\n\",\n    \"debug(\\n\",\n    \"    im(cm),\\n\",\n    \"    re(cm),\\n\",\n    \"    mod(cm),\\n\",\n    \"    conj(cm),\\n\",\n    \"    is_complex(cm),\\n\",\n    \"    as_complex(1),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"b435f3d6\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.164962Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.164427Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.174228Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.173668Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"cumsum(a)\\n\",\n      \"--------------------\\n\",\n      \"array([ 1,  4,  6, 10])\\n\",\n      \"\\n\",\n      \"cumprod(a)\\n\",\n      \"--------------------\\n\",\n      \"array([ 1,  3,  6, 24])\\n\",\n      \"\\n\",\n      \"cummin(a)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 1, 1, 1])\\n\",\n      \"\\n\",\n      \"cummax(a)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 3, 3, 4])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# cum stats\\n\",\n    \"a = [1,3,2,4]\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    cumsum(a),\\n\",\n    \"    cumprod(a),\\n\",\n    \"    cummin(a),\\n\",\n    \"    cummax(a),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"d3067c02\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.188127Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.187588Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.199207Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.199626Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"as_date([\\\"1jan1960\\\", \\\"2jan1960\\\", \\\"31mar1960\\\", \\\"30jul1960\\\"], format=\\\"%d%b%Y\\\")\\n\",\n      \"--------------------\\n\",\n      \"array([datetime.date(1960, 1, 1), datetime.date(1960, 1, 2),\\n\",\n      \"       datetime.date(1960, 3, 31), datetime.date(1960, 7, 30)],\\n\",\n      \"      dtype=object)\\n\",\n      \"\\n\",\n      \"as_date([\\\"02/27/92\\\", \\\"02/27/92\\\", \\\"01/14/92\\\", \\\"02/28/92\\\", \\\"02/01/92\\\"], format=\\\"%m/%d/%y\\\")\\n\",\n      \"--------------------\\n\",\n      \"array([datetime.date(1992, 2, 27), datetime.date(1992, 2, 27),\\n\",\n      \"       datetime.date(1992, 1, 14), datetime.date(1992, 2, 28),\\n\",\n      \"       datetime.date(1992, 2, 1)], dtype=object)\\n\",\n      \"\\n\",\n      \"as_date(32768, origin=\\\"1900-01-01\\\")\\n\",\n      \"--------------------\\n\",\n      \"datetime.date(1989, 9, 19)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# date\\n\",\n    \"debug(\\n\",\n    \"    as_date([\\\"1jan1960\\\", \\\"2jan1960\\\", \\\"31mar1960\\\", \\\"30jul1960\\\"], format=\\\"%d%b%Y\\\"),\\n\",\n    \"    as_date([\\\"02/27/92\\\", \\\"02/27/92\\\", \\\"01/14/92\\\", \\\"02/28/92\\\", \\\"02/01/92\\\"], format=\\\"%m/%d/%y\\\"),\\n\",\n    \"    as_date(32768, origin=\\\"1900-01-01\\\"),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"ffafcee8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.211713Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.211124Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.220254Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.220640Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"levels(fct)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2, 3, 4])\\n\",\n      \"\\n\",\n      \"droplevels(fct)\\n\",\n      \"--------------------\\n\",\n      \"[1, 2, 3]\\n\",\n      \"Categories (3, int64): [1, 2, 3]\\n\",\n      \"\\n\",\n      \"is_factor(fct)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"as_factor([1,2,3])\\n\",\n      \"--------------------\\n\",\n      \"[1, 2, 3]\\n\",\n      \"Categories (3, int64): [1, 2, 3]\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# factor\\n\",\n    \"fct = factor([1,2,3], levels=[1,2,3,4])\\n\",\n    \"debug(\\n\",\n    \"    levels(fct),\\n\",\n    \"    droplevels(fct),\\n\",\n    \"    is_factor(fct),\\n\",\n    \"    as_factor([1,2,3]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"20f4bae9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.235532Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.235022Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.253216Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.252791Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"TRUE\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"FALSE\\n\",\n      \"--------------------\\n\",\n      \"False\\n\",\n      \"\\n\",\n      \"is_true(TRUE)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"not is_true([TRUE, TRUE])\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_false(FALSE)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_logical(TRUE)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_logical([TRUE, FALSE])\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"as_logical([0, 1])\\n\",\n      \"--------------------\\n\",\n      \"array([False,  True])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# logical\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    TRUE,\\n\",\n    \"    FALSE,\\n\",\n    \"    is_true(TRUE),\\n\",\n    \"    not is_true([TRUE, TRUE]),\\n\",\n    \"    is_false(FALSE),\\n\",\n    \"    is_logical(TRUE),\\n\",\n    \"    is_logical([TRUE, FALSE]),\\n\",\n    \"    as_logical([0, 1]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"0314c145\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.264422Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.263869Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.283925Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.284345Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"NA\\n\",\n      \"--------------------\\n\",\n      \"nan\\n\",\n      \"\\n\",\n      \"NaN\\n\",\n      \"--------------------\\n\",\n      \"nan\\n\",\n      \"\\n\",\n      \"NA is NaN\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"type(NA)\\n\",\n      \"--------------------\\n\",\n      \"<class 'float'>\\n\",\n      \"\\n\",\n      \"is_na([NA, NaN, None])\\n\",\n      \"--------------------\\n\",\n      \"array([ True,  True,  True])\\n\",\n      \"\\n\",\n      \"any_na([1,2, NA])\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"numpy.array([1,2,NA])\\n\",\n      \"--------------------\\n\",\n      \"array([ 1.,  2., nan])\\n\",\n      \"\\n\",\n      \"numpy.array(['a', 'b', NA])\\n\",\n      \"--------------------\\n\",\n      \"array(['a', 'b', 'nan'], dtype='<U32')\\n\",\n      \"\\n\",\n      \"numpy.array(['a', 'b', None])\\n\",\n      \"--------------------\\n\",\n      \"array(['a', 'b', None], dtype=object)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# na\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    NA,\\n\",\n    \"    NaN,\\n\",\n    \"    NA is NaN,\\n\",\n    \"    type(NA),\\n\",\n    \"    is_na([NA, NaN, None]),\\n\",\n    \"    any_na([1,2, NA]),\\n\",\n    \"    numpy.array([1,2,NA]),\\n\",\n    \"    numpy.array(['a', 'b', NA]),\\n\",\n    \"    numpy.array(['a', 'b', None]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"daf219e5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.297304Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.296171Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.303277Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.303773Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"NULL\\n\",\n      \"--------------------\\n\",\n      \"None\\n\",\n      \"\\n\",\n      \"NULL is None\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_null(NA)\\n\",\n      \"--------------------\\n\",\n      \"False\\n\",\n      \"\\n\",\n      \"is_null(NULL)\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"as_null('whatever')\\n\",\n      \"--------------------\\n\",\n      \"None\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# null\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    NULL,\\n\",\n    \"    NULL is None,\\n\",\n    \"    is_null(NA),\\n\",\n    \"    is_null(NULL),\\n\",\n    \"    as_null('whatever'),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"5474eafd\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.312715Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.311845Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.316202Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.316569Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([19, 61, 85, 93, 18,  5, 22,  7, 29, 26])\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# random\\n\",\n    \"set_seed(8525)\\n\",\n    \"\\n\",\n    \"sample(seq(1,100), 10) # always: [19, 61, 85, 93, 18,  5, 22,  7, 29, 26]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"8ada3bad\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.348550Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.347945Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.522792Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.523230Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"str(c(c(1,2), seq(3,4)))\\n\",\n      \"--------------------\\n\",\n      \"'[1, 2, 3, 4]'\\n\",\n      \"\\n\",\n      \"seq_len(5)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2, 3, 4, 5])\\n\",\n      \"\\n\",\n      \"seq_along([4,2,1])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2, 3])\\n\",\n      \"\\n\",\n      \"rev(seq_len(5))\\n\",\n      \"--------------------\\n\",\n      \"array([5, 4, 3, 2, 1])\\n\",\n      \"\\n\",\n      \"rep([1,2], 2)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2, 1, 2])\\n\",\n      \"\\n\",\n      \"rep([1,2], each=2)\\n\",\n      \"--------------------\\n\",\n      \"array([1, 1, 2, 2])\\n\",\n      \"\\n\",\n      \"length([1,2])\\n\",\n      \"--------------------\\n\",\n      \"2\\n\",\n      \"\\n\",\n      \"length(\\\"abcd\\\")\\n\",\n      \"--------------------\\n\",\n      \"1\\n\",\n      \"\\n\",\n      \"lengths(10)\\n\",\n      \"--------------------\\n\",\n      \"array([1])\\n\",\n      \"\\n\",\n      \"lengths([[1], [1,2]])\\n\",\n      \"--------------------\\n\",\n      \"array([1, 2])\\n\",\n      \"\\n\",\n      \"unique([3,3,2,4,4])\\n\",\n      \"--------------------\\n\",\n      \"array([3, 2, 4])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# seq\\n\",\n    \"debug(\\n\",\n    \"    str(c(c(1,2), seq(3,4))),\\n\",\n    \"    seq_len(5),\\n\",\n    \"    seq_along([4,2,1]),\\n\",\n    \"    rev(seq_len(5)),\\n\",\n    \"    rep([1,2], 2),\\n\",\n    \"    rep([1,2], each=2),\\n\",\n    \"    length([1,2]),\\n\",\n    \"    length(\\\"abcd\\\"), # string is scalar\\n\",\n    \"    lengths(10),\\n\",\n    \"    lengths([[1], [1,2]]),\\n\",\n    \"    unique([3,3,2,4,4]), # order kept\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"d5243e35\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.536401Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.535702Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.648974Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.649391Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"beta([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([1.        , 0.5       , 0.33333333])\\n\",\n      \"\\n\",\n      \"lbeta([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([ 0.        , -0.69314718, -1.09861229])\\n\",\n      \"\\n\",\n      \"gamma([1,2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([1., 1., 2.])\\n\",\n      \"\\n\",\n      \"lgamma([1,2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([0.        , 0.        , 0.69314718])\\n\",\n      \"\\n\",\n      \"digamma([1,2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([-0.57721566,  0.42278434,  0.92278434])\\n\",\n      \"\\n\",\n      \"trigamma([1,2,3])\\n\",\n      \"--------------------\\n\",\n      \"array([1.64493407, 0.64493407, 0.39493407])\\n\",\n      \"\\n\",\n      \"psigamma([1,2,3], 1)\\n\",\n      \"--------------------\\n\",\n      \"array([1.64493407, 0.64493407, 0.39493407])\\n\",\n      \"\\n\",\n      \"choose([4,6], 2)\\n\",\n      \"--------------------\\n\",\n      \"array([ 6., 15.])\\n\",\n      \"\\n\",\n      \"lchoose([4,6], 2)\\n\",\n      \"--------------------\\n\",\n      \"array([1.79175947, 2.7080502 ])\\n\",\n      \"\\n\",\n      \"factorial([1,5])\\n\",\n      \"--------------------\\n\",\n      \"array([  1., 120.])\\n\",\n      \"\\n\",\n      \"lfactorial([1,5])\\n\",\n      \"--------------------\\n\",\n      \"array([0.        , 4.78749174])\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# special\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    beta([1,2,3], 1),\\n\",\n    \"    lbeta([1,2,3], 1),\\n\",\n    \"    gamma([1,2,3]),\\n\",\n    \"    lgamma([1,2,3]),\\n\",\n    \"    digamma([1,2,3]),\\n\",\n    \"    trigamma([1,2,3]),\\n\",\n    \"    psigamma([1,2,3], 1),\\n\",\n    \"    choose([4,6], 2),\\n\",\n    \"    lchoose([4,6], 2),\\n\",\n    \"    factorial([1,5]),\\n\",\n    \"    lfactorial([1,5]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"id\": \"98d95334\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.698478Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.697906Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.273590Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.273979Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"is_character(\\\"a\\\")\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_character([\\\"a\\\", \\\"b\\\"])\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"as_character([1,2])\\n\",\n      \"--------------------\\n\",\n      \"array(['1', '2'], dtype='<U21')\\n\",\n      \"\\n\",\n      \"grep(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"])\\n\",\n      \"--------------------\\n\",\n      \"array([0, 1])\\n\",\n      \"\\n\",\n      \"grep(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"], fixed=True)\\n\",\n      \"--------------------\\n\",\n      \"array([1])\\n\",\n      \"\\n\",\n      \"grepl(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"], fixed=True)\\n\",\n      \"--------------------\\n\",\n      \"array([False,  True])\\n\",\n      \"\\n\",\n      \"sub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"])\\n\",\n      \"--------------------\\n\",\n      \"array(['xb', 'x.d.e'], dtype='<U5')\\n\",\n      \"\\n\",\n      \"sub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"], fixed=True)\\n\",\n      \"--------------------\\n\",\n      \"array(['ab', 'cxd.e'], dtype='<U5')\\n\",\n      \"\\n\",\n      \"gsub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"])\\n\",\n      \"--------------------\\n\",\n      \"array(['xx', 'xxxxx'], dtype='<U5')\\n\",\n      \"\\n\",\n      \"gsub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"], fixed=True)\\n\",\n      \"--------------------\\n\",\n      \"array(['ab', 'cxdxe'], dtype='<U5')\\n\",\n      \"\\n\",\n      \"nchar('\\\\0')\\n\",\n      \"--------------------\\n\",\n      \"array(0)\\n\",\n      \"\\n\",\n      \"nchar('\\\\0', type_='width')\\n\",\n      \"--------------------\\n\",\n      \"array(0)\\n\",\n      \"\\n\",\n      \"nzchar([\\\"a\\\", \\\"\\\"])\\n\",\n      \"--------------------\\n\",\n      \"array([ True, False])\\n\",\n      \"\\n\",\n      \"paste(\\\"a\\\", \\\"b\\\")\\n\",\n      \"--------------------\\n\",\n      \"array('a b', dtype=object)\\n\",\n      \"\\n\",\n      \"paste([\\\"a\\\", \\\"c\\\"], [\\\"b\\\", \\\"d\\\"], sep=\\\".\\\")\\n\",\n      \"--------------------\\n\",\n      \"array(['a.b', 'c.d'], dtype=object)\\n\",\n      \"\\n\",\n      \"paste0([\\\"a\\\", \\\"c\\\"], [\\\"b\\\", \\\"d\\\"], collapse=\\\"; \\\")\\n\",\n      \"--------------------\\n\",\n      \"'ab; cd'\\n\",\n      \"\\n\",\n      \"sprintf(\\\"%s, %d, %.3f\\\", pi, pi, pi)\\n\",\n      \"--------------------\\n\",\n      \"array('3.141592653589793, 3, 3.142', dtype='<U27')\\n\",\n      \"\\n\",\n      \"substr(\\\"abcde\\\", 1, 3)\\n\",\n      \"--------------------\\n\",\n      \"array('bc', dtype='<U2')\\n\",\n      \"\\n\",\n      \"substring(\\\"abcde\\\", 1)\\n\",\n      \"--------------------\\n\",\n      \"array('bcde', dtype='<U4')\\n\",\n      \"\\n\",\n      \"strsplit([\\\"a.b.c\\\", \\\"e.f\\\"], \\\".\\\", fixed=True)\\n\",\n      \"--------------------\\n\",\n      \"array([list(['a', 'b', 'c']), list(['e', 'f'])], dtype=object)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# string\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    is_character(\\\"a\\\"),\\n\",\n    \"    is_character([\\\"a\\\", \\\"b\\\"]),\\n\",\n    \"    as_character([1,2]),\\n\",\n    \"    grep(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"]),\\n\",\n    \"    grep(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"], fixed=True),\\n\",\n    \"    grepl(\\\".\\\", [\\\"ab\\\", \\\"c.d\\\"], fixed=True),\\n\",\n    \"    sub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"]),\\n\",\n    \"    sub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"], fixed=True),\\n\",\n    \"    gsub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"]),\\n\",\n    \"    gsub(\\\".\\\", \\\"x\\\", [\\\"ab\\\", \\\"c.d.e\\\"], fixed=True),\\n\",\n    \"    nchar('\\\\0'),\\n\",\n    \"    nchar('\\\\0', type_='width'),\\n\",\n    \"    nzchar([\\\"a\\\", \\\"\\\"]),\\n\",\n    \"    paste(\\\"a\\\", \\\"b\\\"),\\n\",\n    \"    paste([\\\"a\\\", \\\"c\\\"], [\\\"b\\\", \\\"d\\\"], sep=\\\".\\\"),\\n\",\n    \"    paste0([\\\"a\\\", \\\"c\\\"], [\\\"b\\\", \\\"d\\\"], collapse=\\\"; \\\"),\\n\",\n    \"    sprintf(\\\"%s, %d, %.3f\\\", pi, pi, pi),\\n\",\n    \"    substr(\\\"abcde\\\", 1, 3),\\n\",\n    \"    substring(\\\"abcde\\\", 1),\\n\",\n    \"    strsplit([\\\"a.b.c\\\", \\\"e.f\\\"], \\\".\\\", fixed=True),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"id\": \"20d6a26f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.298033Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.297388Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.304399Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.304843Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            a       b\\n\",\n       \"      <int64> <int64>\\n\",\n       \"count       4       4\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# table\\n\",\n    \"\\n\",\n    \"table(rep(['a', 'b'], each=4))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"id\": \"07f292c9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.381917Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.334838Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.389093Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.389462Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"is_double(numpy.array([1,2]))\\n\",\n      \"--------------------\\n\",\n      \"False\\n\",\n      \"\\n\",\n      \"is_integer(numpy.array([1,2]))\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_numeric(numpy.array([1,2]))\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_double(numpy.array([1,2], dtype=numpy.double))\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_atomic(\\\"abc\\\")\\n\",\n      \"--------------------\\n\",\n      \"True\\n\",\n      \"\\n\",\n      \"is_element(1, [1,2])\\n\",\n      \"--------------------\\n\",\n      \"array(True)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# testing\\n\",\n    \"debug(\\n\",\n    \"    is_double(numpy.array([1,2])),\\n\",\n    \"    is_integer(numpy.array([1,2])),\\n\",\n    \"    is_numeric(numpy.array([1,2])),\\n\",\n    \"    is_double(numpy.array([1,2], dtype=numpy.double)),\\n\",\n    \"    is_atomic(\\\"abc\\\"),\\n\",\n    \"    is_element(1, [1,2]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"id\": \"5238cf10\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.446511Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.445881Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.531680Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.532084Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"cos(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.8775825618903728\\n\",\n      \"\\n\",\n      \"sin(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.479425538604203\\n\",\n      \"\\n\",\n      \"tan(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.5463024898437905\\n\",\n      \"\\n\",\n      \"acos(.5)\\n\",\n      \"--------------------\\n\",\n      \"1.0471975511965979\\n\",\n      \"\\n\",\n      \"asin(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.5235987755982989\\n\",\n      \"\\n\",\n      \"atan2(.5, 1)\\n\",\n      \"--------------------\\n\",\n      \"0.4636476090008061\\n\",\n      \"\\n\",\n      \"cospi(.5)\\n\",\n      \"--------------------\\n\",\n      \"6.123233995736766e-17\\n\",\n      \"\\n\",\n      \"sinpi(.5)\\n\",\n      \"--------------------\\n\",\n      \"1.0\\n\",\n      \"\\n\",\n      \"tanpi(.5)\\n\",\n      \"--------------------\\n\",\n      \"1.633123935319537e+16\\n\",\n      \"\\n\",\n      \"cosh(.5)\\n\",\n      \"--------------------\\n\",\n      \"1.1276259652063807\\n\",\n      \"\\n\",\n      \"sinh(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.5210953054937474\\n\",\n      \"\\n\",\n      \"tanh(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.46211715726000974\\n\",\n      \"\\n\",\n      \"acosh(1)\\n\",\n      \"--------------------\\n\",\n      \"0.0\\n\",\n      \"\\n\",\n      \"asinh(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.48121182505960347\\n\",\n      \"\\n\",\n      \"atanh(.5)\\n\",\n      \"--------------------\\n\",\n      \"0.5493061443340548\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# trig/hb\\n\",\n    \"debug(\\n\",\n    \"    cos(.5),\\n\",\n    \"    sin(.5),\\n\",\n    \"    tan(.5),\\n\",\n    \"    acos(.5),\\n\",\n    \"    asin(.5),\\n\",\n    \"    atan2(.5, 1),\\n\",\n    \"    cospi(.5),\\n\",\n    \"    sinpi(.5),\\n\",\n    \"    tanpi(.5),\\n\",\n    \"    cosh(.5),\\n\",\n    \"    sinh(.5),\\n\",\n    \"    tanh(.5),\\n\",\n    \"    acosh(1),\\n\",\n    \"    asinh(.5),\\n\",\n    \"    atanh(.5),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"id\": \"c1e0a5ae\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.568013Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.567391Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.572315Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.572907Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"which([True, False, True])\\n\",\n      \"--------------------\\n\",\n      \"array([0, 2])\\n\",\n      \"\\n\",\n      \"which_max([3,2,4,1])\\n\",\n      \"--------------------\\n\",\n      \"2\\n\",\n      \"\\n\",\n      \"which_min([3,2,4,1])\\n\",\n      \"--------------------\\n\",\n      \"3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"# which\\n\",\n    \"\\n\",\n    \"debug(\\n\",\n    \"    which([True, False, True]),\\n\",\n    \"    which_max([3,2,4,1]),\\n\",\n    \"    which_min([3,2,4,1]),\\n\",\n    \"    **debug_kwargs\\n\",\n    \")\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/between.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"5fcd666d\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:26.208715Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:26.208137Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.046740Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.047111Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fbetween.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ between</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Check if a value is between two other values\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/between.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A value  \\n\",\n       \"&emsp;&emsp;`left`: The left bound  \\n\",\n       \"&emsp;&emsp;`right`: The right bound  \\n\",\n       \"&emsp;&emsp;`inclusive`: Either `both`, `neither`, `left` or `right`.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Include boundaries. Whether to set each bound as closed or open.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A bool value if `x` is scalar, otherwise an array of boolean values  \\n\",\n       \"&emsp;&emsp;Note that it will be always False when NA appears in x, left or right.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/between.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(between)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"6b3effe3\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.052648Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.051869Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.073636Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.074124Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     False\\n\",\n       \"1     False\\n\",\n       \"2     False\\n\",\n       \"3     False\\n\",\n       \"4     False\\n\",\n       \"5     False\\n\",\n       \"6      True\\n\",\n       \"7      True\\n\",\n       \"8      True\\n\",\n       \"9     False\\n\",\n       \"10    False\\n\",\n       \"11    False\\n\",\n       \"dtype: bool\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"between(range(1, 13), 7, 9)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"302aa8fc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.088657Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.087235Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.093992Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.094418Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([ 0.83452786,  0.10189189,  0.74650094,  0.47880049,  0.55936638,\\n\",\n       \"       -0.70022441,  0.43960076, -0.06383017,  0.28146185, -0.5502206 ,\\n\",\n       \"        0.21524796,  0.50479523,  0.60164882,  0.51928143, -0.01063673,\\n\",\n       \"        0.84926787,  0.2968923 , -0.91378905,  0.75111234, -0.00124731,\\n\",\n       \"        0.90624557, -0.80836519, -0.64955713,  0.06907295,  0.55666354,\\n\",\n       \"       -0.60156603, -0.18858712, -0.34637117,  0.75442128,  0.6532232 ,\\n\",\n       \"       -0.10773449,  0.39341492, -0.33727655,  0.16413264, -0.82122347,\\n\",\n       \"        0.85301267,  0.68354877, -0.39180811,  0.54156329, -0.87504542,\\n\",\n       \"       -0.59525048, -0.94089336, -0.22030511,  0.13365225, -0.35710286,\\n\",\n       \"        0.48904832, -0.58548603,  0.11360724, -0.14562895, -0.04248941,\\n\",\n       \"       -0.4088952 ,  0.20738685,  0.16683007, -0.78370598, -0.57202633,\\n\",\n       \"       -0.04414652,  0.10903364, -0.20484245,  0.03577897, -0.66212973,\\n\",\n       \"        0.15423302, -0.16953601,  0.9420302 , -0.91207817,  0.62976181])\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = rnorm(100)\\n\",\n    \"x[between(x, -1, 1)]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"d1b79572\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.118770Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.118138Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.123518Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.122366Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Mon Mothma</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Chandrila</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>Watto</td>\\n\",\n       \"      <td>137.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>blue, grey</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Toydaria</td>\\n\",\n       \"      <td>Toydarian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>Sebulba</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>40.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, red</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Malastare</td>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>Gasgano</td>\\n\",\n       \"      <td>122.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Troiken</td>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           name    height      mass hair_color   skin_color eye_color  \\\\\\n\",\n       \"       <object> <float64> <float64>   <object>     <object>  <object>   \\n\",\n       \"4   Leia Organa     150.0      49.0      brown        light     brown   \\n\",\n       \"26   Mon Mothma     150.0       NaN     auburn         fair      blue   \\n\",\n       \"37        Watto     137.0       NaN      black   blue, grey    yellow   \\n\",\n       \"38      Sebulba     112.0      40.0       none    grey, red    orange   \\n\",\n       \"45      Gasgano     122.0       NaN       none  white, blue     black   \\n\",\n       \"\\n\",\n       \"    birth_year      sex     gender  homeworld    species  \\n\",\n       \"     <float64> <object>   <object>   <object>   <object>  \\n\",\n       \"4         19.0   female   feminine   Alderaan      Human  \\n\",\n       \"26        48.0   female   feminine  Chandrila      Human  \\n\",\n       \"37         NaN     male  masculine   Toydaria  Toydarian  \\n\",\n       \"38         NaN     male  masculine  Malastare        Dug  \\n\",\n       \"45         NaN     male  masculine    Troiken      Xexto  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> filter(between(f.height, 100, 150))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"1e52d002\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.145532Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.144908Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.148229Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.148637Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>R5-D4</td>\\n\",\n       \"      <td>97.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, red</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>Yoda</td>\\n\",\n       \"      <td>66.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>896.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Yoda's species</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Mon Mothma</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Chandrila</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>Wicket Systri Warrick</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>20.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Endor</td>\\n\",\n       \"      <td>Ewok</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>Watto</td>\\n\",\n       \"      <td>137.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>blue, grey</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Toydaria</td>\\n\",\n       \"      <td>Toydarian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>Sebulba</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>40.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, red</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Malastare</td>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>Dud Bolt</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>blue, grey</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Vulpter</td>\\n\",\n       \"      <td>Vulptereen</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>Gasgano</td>\\n\",\n       \"      <td>122.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Troiken</td>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>71</th>\\n\",\n       \"      <td>Ratts Tyerell</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, blue</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Aleen Minor</td>\\n\",\n       \"      <td>Aleena</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>72</th>\\n\",\n       \"      <td>R4-P17</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>silver, red</td>\\n\",\n       \"      <td>red, blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     name    height      mass hair_color   skin_color  \\\\\\n\",\n       \"                 <object> <float64> <float64>   <object>     <object>   \\n\",\n       \"2                   R2-D2      96.0      32.0        NaN  white, blue   \\n\",\n       \"4             Leia Organa     150.0      49.0      brown        light   \\n\",\n       \"7                   R5-D4      97.0      32.0        NaN   white, red   \\n\",\n       \"18                   Yoda      66.0      17.0      white        green   \\n\",\n       \"26             Mon Mothma     150.0       NaN     auburn         fair   \\n\",\n       \"28  Wicket Systri Warrick      88.0      20.0      brown        brown   \\n\",\n       \"37                  Watto     137.0       NaN      black   blue, grey   \\n\",\n       \"38                Sebulba     112.0      40.0       none    grey, red   \\n\",\n       \"44               Dud Bolt      94.0      45.0       none   blue, grey   \\n\",\n       \"45                Gasgano     122.0       NaN       none  white, blue   \\n\",\n       \"71          Ratts Tyerell      79.0      15.0       none   grey, blue   \\n\",\n       \"72                 R4-P17      96.0       NaN       none  silver, red   \\n\",\n       \"\\n\",\n       \"    eye_color  birth_year      sex     gender    homeworld         species  \\n\",\n       \"     <object>   <float64> <object>   <object>     <object>        <object>  \\n\",\n       \"2         red        33.0     none  masculine        Naboo           Droid  \\n\",\n       \"4       brown        19.0   female   feminine     Alderaan           Human  \\n\",\n       \"7         red         NaN     none  masculine     Tatooine           Droid  \\n\",\n       \"18      brown       896.0     male  masculine          NaN  Yoda's species  \\n\",\n       \"26       blue        48.0   female   feminine    Chandrila           Human  \\n\",\n       \"28      brown         8.0     male  masculine        Endor            Ewok  \\n\",\n       \"37     yellow         NaN     male  masculine     Toydaria       Toydarian  \\n\",\n       \"38     orange         NaN     male  masculine    Malastare             Dug  \\n\",\n       \"44     yellow         NaN     male  masculine      Vulpter      Vulptereen  \\n\",\n       \"45      black         NaN     male  masculine      Troiken           Xexto  \\n\",\n       \"71    unknown         NaN     male  masculine  Aleen Minor          Aleena  \\n\",\n       \"72  red, blue         NaN     none   feminine          NaN           Droid  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> filter(100 <= f.height <= 150) # not as expected\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/bind.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"bbd58535\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.370728Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.370065Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.337075Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.337476Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fbind.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ bind_rows</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Bind rows of give dataframes\\n\",\n       \"\\n\",\n       \"Original APIs https://dplyr.tidyverse.org/reference/bind.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*data`: Dataframes to combine  \\n\",\n       \"&emsp;&emsp;`_id`: The name of the id columns  \\n\",\n       \"&emsp;&emsp;`_copy`: If `False`, do not copy data unnecessarily.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Original API does not support this. This argument will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;passed by to `pandas.concat()` as `copy` argument.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`**kwargs`: A mapping of dataframe, keys will be used as _id col.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The combined dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ bind_cols</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Bind columns of give dataframes\\n\",\n       \"\\n\",\n       \"Note that unlike `dplyr`, mismatched dimensions are allowed and  \\n\",\n       \"missing rows will be filled with `NA`s  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*data`: Dataframes to bind  \\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_copy`: If `False`, do not copy data unnecessarily.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Original API does not support this. This argument will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;passed by to `pandas.concat()` as `copy` argument.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The combined dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/bind.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(bind_rows, bind_cols, book='bind')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"d90cc5b5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.387921Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.387279Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.396036Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.393251Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"               name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"           <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4    Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5  Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6    Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"    <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3     yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4  blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5       blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6       blue        64.0     male  masculine    Eriadu    Human  \"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"one = starwars >> slice(c[:4])\\n\",\n    \"two = starwars >> slice(c[9:12])\\n\",\n    \"\\n\",\n    \"one >> bind_rows(two)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"c79c4827\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.432896Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.431469Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.440809Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.441223Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"               name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"           <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4    Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5  Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6    Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"    <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3     yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4  blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5       blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6       blue        64.0     male  masculine    Eriadu    Human  \"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bind_rows([one, two])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"2521fa9b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.487046Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.486088Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.496550Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.496975Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"            <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0     Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1              C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2              R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3        Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4     Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5   Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6     Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"7     Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"8   Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"9     Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"10    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"11             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"12             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"13       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"\\n\",\n       \"    eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"     <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0        blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1      yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2         red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3      yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4   blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5        blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6        blue        64.0     male  masculine    Eriadu    Human  \\n\",\n       \"7   blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"8        blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"9        blue        64.0     male  masculine    Eriadu    Human  \\n\",\n       \"10       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"11     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"12        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"13     yellow        41.9     male  masculine  Tatooine    Human  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bind_rows([one, two], [two, one])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"e4a9545e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.523072Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.522454Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.725303Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.725813Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       2\\n\",\n       \"1       3       4\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(a=1, b=2) >> bind_rows(tibble(a=3, b=4))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"415463c0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.736260Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.735678Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.804662Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.805265Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       2\\n\",\n       \"1       3       5\\n\",\n       \"2       4       6\\n\",\n       \"3       7       8\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(a=1, b=2) >> bind_rows(\\n\",\n    \"    tibble(a=[3, 4], b=[5, 6]),\\n\",\n    \"    tibble(a=7, b=8)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"0c880f14\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:48.848911Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:48.848099Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:48.865280Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:48.865796Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       id              name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"  <int64>          <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0       0    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1       0             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2       0             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3       0       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4       1    Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5       1  Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6       1    Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"    <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3     yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4  blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5       blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6       blue        64.0     male  masculine    Eriadu    Human  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bind_rows([one, two], _id = \\\"id\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"fd18f54b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.002368Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.001748Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.009472Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.008227Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        id              name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"  <object>          <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0        a    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1        a             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2        a             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3        a       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4        b    Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5        b  Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6        b    Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"    <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3     yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4  blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5       blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6       blue        64.0     male  masculine    Eriadu    Human  \"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# If we need a name for one\\n\",\n    \"bind_rows(a=one, b=two, _id = \\\"id\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"85f9ae65\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.041312Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.040714Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.048263Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.048687Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>groups</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>group 1</td>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>group 1</td>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>group 1</td>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>group 1</td>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>group 2</td>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>group 2</td>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>group 2</td>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    groups              name    height      mass     hair_color   skin_color  \\\\\\n\",\n       \"  <object>          <object> <float64> <float64>       <object>     <object>   \\n\",\n       \"0  group 1    Luke Skywalker     172.0      77.0          blond         fair   \\n\",\n       \"1  group 1             C-3PO     167.0      75.0            NaN         gold   \\n\",\n       \"2  group 1             R2-D2      96.0      32.0            NaN  white, blue   \\n\",\n       \"3  group 1       Darth Vader     202.0     136.0           none        white   \\n\",\n       \"4  group 2    Obi-Wan Kenobi     182.0      77.0  auburn, white         fair   \\n\",\n       \"5  group 2  Anakin Skywalker     188.0      84.0          blond         fair   \\n\",\n       \"6  group 2    Wilhuff Tarkin     180.0       NaN   auburn, grey         fair   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year      sex     gender homeworld  species  \\n\",\n       \"    <object>   <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0       blue        19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1     yellow       112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2        red        33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3     yellow        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"4  blue-gray        57.0     male  masculine   Stewjon    Human  \\n\",\n       \"5       blue        41.9     male  masculine  Tatooine    Human  \\n\",\n       \"6       blue        64.0     male  masculine    Eriadu    Human  \"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"bind_rows(**{\\\"group 1\\\": one, \\\"group 2\\\": two}, _id = \\\"groups\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"203c53a8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.084971Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.084405Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.090833Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.091248Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x         y\\n\",\n       \"  <float64> <float64>\\n\",\n       \"0       0.0       NaN\\n\",\n       \"1       1.0       NaN\\n\",\n       \"2       2.0       NaN\\n\",\n       \"3       NaN       0.0\\n\",\n       \"4       NaN       1.0\\n\",\n       \"5       NaN       2.0\\n\",\n       \"6       NaN       3.0\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x=range(3)) >> bind_rows(\\n\",\n    \"    tibble(y=range(4))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"0aeecbc1\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.131490Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.130939Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.136968Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.137351Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x         y\\n\",\n       \"  <int64> <float64>\\n\",\n       \"0       0       0.0\\n\",\n       \"1       1       1.0\\n\",\n       \"2       2       NaN\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# NAs filled for missed rows\\n\",\n    \"tibble(x=range(3)) >> bind_cols(\\n\",\n    \"    tibble(y=range(2))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"655c5124\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.173671Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.173009Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.182534Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.182938Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x\\n\",\n       \"  <int64>\\n\",\n       \"0       0\\n\",\n       \"1       1\\n\",\n       \"2       2\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x = range(3)) >> bind_cols(tibble())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"f9281c6c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.191452Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.190862Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:49.340765Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:49.341239Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 13:42:54][datar][WARNING] New names:\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'name' -> 'name__0'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'height' -> 'height__1'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'mass' -> 'mass__2'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'hair_color' -> 'hair_color__3'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'skin_color' -> 'skin_color__4'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'eye_color' -> 'eye_color__5'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'birth_year' -> 'birth_year__6'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'sex' -> 'sex__7'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'gender' -> 'gender__8'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'homeworld' -> 'homeworld__9'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'species' -> 'species__10'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'name' -> 'name__11'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'height' -> 'height__12'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'mass' -> 'mass__13'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'hair_color' -> 'hair_color__14'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'skin_color' -> 'skin_color__15'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'eye_color' -> 'eye_color__16'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'birth_year' -> 'birth_year__17'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'sex' -> 'sex__18'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'gender' -> 'gender__19'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'homeworld' -> 'homeworld__20'\\n\",\n      \"[2022-12-02 13:42:54][datar][WARNING] * 'species' -> 'species__21'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name__0</th>\\n\",\n       \"      <th>height__1</th>\\n\",\n       \"      <th>mass__2</th>\\n\",\n       \"      <th>hair_color__3</th>\\n\",\n       \"      <th>skin_color__4</th>\\n\",\n       \"      <th>eye_color__5</th>\\n\",\n       \"      <th>birth_year__6</th>\\n\",\n       \"      <th>sex__7</th>\\n\",\n       \"      <th>gender__8</th>\\n\",\n       \"      <th>homeworld__9</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th>height__12</th>\\n\",\n       \"      <th>mass__13</th>\\n\",\n       \"      <th>hair_color__14</th>\\n\",\n       \"      <th>skin_color__15</th>\\n\",\n       \"      <th>eye_color__16</th>\\n\",\n       \"      <th>birth_year__17</th>\\n\",\n       \"      <th>sex__18</th>\\n\",\n       \"      <th>gender__19</th>\\n\",\n       \"      <th>homeworld__20</th>\\n\",\n       \"      <th>species__21</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >...</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>7 rows × 22 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           name__0  height__1   mass__2 hair_color__3 skin_color__4  \\\\\\n\",\n       \"          <object>  <float64> <float64>      <object>      <object>   \\n\",\n       \"0   Luke Skywalker      172.0      77.0         blond          fair   \\n\",\n       \"1            C-3PO      167.0      75.0           NaN          gold   \\n\",\n       \"2            R2-D2       96.0      32.0           NaN   white, blue   \\n\",\n       \"3      Darth Vader      202.0     136.0          none         white   \\n\",\n       \"9              NaN        NaN       NaN           NaN           NaN   \\n\",\n       \"10             NaN        NaN       NaN           NaN           NaN   \\n\",\n       \"11             NaN        NaN       NaN           NaN           NaN   \\n\",\n       \"\\n\",\n       \"   eye_color__5  birth_year__6   sex__7  gender__8 homeworld__9  ...  \\\\\\n\",\n       \"       <object>      <float64> <object>   <object>     <object>  ...   \\n\",\n       \"0          blue           19.0     male  masculine     Tatooine  ...   \\n\",\n       \"1        yellow          112.0     none  masculine     Tatooine  ...   \\n\",\n       \"2           red           33.0     none  masculine        Naboo  ...   \\n\",\n       \"3        yellow           41.9     male  masculine     Tatooine  ...   \\n\",\n       \"9           NaN            NaN      NaN        NaN          NaN  ...   \\n\",\n       \"10          NaN            NaN      NaN        NaN          NaN  ...   \\n\",\n       \"11          NaN            NaN      NaN        NaN          NaN        \\n\",\n       \"\\n\",\n       \"   height__12  mass__13  hair_color__14  skin_color__15 eye_color__16  \\\\\\n\",\n       \"    <float64> <float64>        <object>        <object>      <object>   \\n\",\n       \"0         NaN       NaN             NaN             NaN           NaN   \\n\",\n       \"1         NaN       NaN             NaN             NaN           NaN   \\n\",\n       \"2         NaN       NaN             NaN             NaN           NaN   \\n\",\n       \"3         NaN       NaN             NaN             NaN           NaN   \\n\",\n       \"9       182.0      77.0   auburn, white            fair     blue-gray   \\n\",\n       \"10      188.0      84.0           blond            fair          blue   \\n\",\n       \"11      180.0       NaN    auburn, grey            fair          blue   \\n\",\n       \"\\n\",\n       \"   birth_year__17  sex__18  gender__19 homeworld__20 species__21  \\n\",\n       \"        <float64> <object>    <object>      <object>    <object>  \\n\",\n       \"0             NaN      NaN         NaN           NaN         NaN  \\n\",\n       \"1             NaN      NaN         NaN           NaN         NaN  \\n\",\n       \"2             NaN      NaN         NaN           NaN         NaN  \\n\",\n       \"3             NaN      NaN         NaN           NaN         NaN  \\n\",\n       \"9            57.0     male   masculine       Stewjon       Human  \\n\",\n       \"10           41.9     male   masculine      Tatooine       Human  \\n\",\n       \"11           64.0     male   masculine        Eriadu       Human  \\n\",\n       \"\\n\",\n       \"[7 rows x 22 columns]\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"one >> bind_cols(two)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/case_when.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"registered-ghost\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:14.044369Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:14.043571Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.175374Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.175875Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcase_when.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ case_when</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Vectorise multiple `if_else()` statements.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`cond`: A boolean vector  \\n\",\n       \"&emsp;&emsp;`value`: A vector with values to replace  \\n\",\n       \"&emsp;&emsp;`*more_cases`: A list of tuples (cond, value)  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A vector with values replaced.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/case_when.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars \\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(case_when)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"inclusive-benjamin\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.227937Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.227306Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.536094Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.537184Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['1', '2', '3', '4', 'fizz', '6', 'buzz', '8', '9', 'fizz', '11',\\n\",\n       \"       '12', '13', 'buzz', 'fizz', '16', '17', '18', '19', 'fizz', 'buzz',\\n\",\n       \"       '22', '23', '24', 'fizz', '26', '27', 'buzz', '29', 'fizz', '31',\\n\",\n       \"       '32', '33', '34', 'fizz buzz', '36', '37', '38', '39', 'fizz',\\n\",\n       \"       '41', 'buzz', '43', '44', 'fizz', '46', '47', '48', 'buzz', 'fizz'],\\n\",\n       \"      dtype=object)\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=range(1,51))\\n\",\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x % 35 == 0, \\\"fizz buzz\\\",\\n\",\n    \"    f.x % 5 == 0,  \\\"fizz\\\",\\n\",\n    \"    f.x % 7 == 0,  \\\"buzz\\\",\\n\",\n    \"    True,          as_character(f.x)\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"affecting-supervision\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.608577Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.608002Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.623803Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.624350Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12',\\n\",\n       \"       '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23',\\n\",\n       \"       '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34',\\n\",\n       \"       '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45',\\n\",\n       \"       '46', '47', '48', '49', '50'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(y=case_when(\\n\",\n    \"    True,          as_character(f.x),\\n\",\n    \"    f.x % 5 == 0,  \\\"fizz\\\",\\n\",\n    \"    f.x % 7 == 0,  \\\"buzz\\\",\\n\",\n    \"    f.x % 35 == 0, \\\"fizz buzz\\\"\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"contrary-infrastructure\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.660776Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.659888Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.681510Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.681883Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([nan, nan, nan, nan, 'fizz', nan, 'buzz', nan, nan, 'fizz', nan,\\n\",\n       \"       nan, nan, 'buzz', 'fizz', nan, nan, nan, nan, 'fizz', 'buzz', nan,\\n\",\n       \"       nan, nan, 'fizz', nan, nan, 'buzz', nan, 'fizz', nan, nan, nan,\\n\",\n       \"       nan, 'fizz', nan, nan, nan, nan, 'fizz', nan, 'buzz', nan, nan,\\n\",\n       \"       'fizz', nan, nan, nan, 'buzz', 'fizz'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x % 5 == 0,  \\\"fizz\\\",\\n\",\n    \"    f.x % 7 == 0,  \\\"buzz\\\",\\n\",\n    \"    f.x % 35 == 0, \\\"fizz buzz\\\"\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"usual-paragraph\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.724536Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.723876Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.746479Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.746895Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['1.0', 'nope', 'nope', 'nope', 'fizz', '6.0', 'buzz', '8.0', '9.0',\\n\",\n       \"       'fizz', '11.0', '12.0', '13.0', 'buzz', 'fizz', '16.0', '17.0',\\n\",\n       \"       '18.0', '19.0', 'fizz', 'buzz', '22.0', '23.0', '24.0', 'fizz',\\n\",\n       \"       '26.0', '27.0', 'buzz', '29.0', 'fizz', '31.0', '32.0', '33.0',\\n\",\n       \"       '34.0', 'fizz buzz', '36.0', '37.0', '38.0', '39.0', 'fizz',\\n\",\n       \"       '41.0', 'buzz', '43.0', '44.0', 'fizz', '46.0', '47.0', '48.0',\\n\",\n       \"       'buzz', 'fizz'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df.iloc[[1,2,3], 0] = NA\\n\",\n    \"\\n\",\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x % 35 == 0, \\\"fizz buzz\\\",\\n\",\n    \"    f.x % 5 == 0,  \\\"fizz\\\",\\n\",\n    \"    f.x % 7 == 0,  \\\"buzz\\\",\\n\",\n    \"    is_na(f.x),    \\\"nope\\\",\\n\",\n    \"    True,          as_character(f.x)\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"waiting-jurisdiction\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.789908Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.789318Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.804195Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.804900Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['1.0', 'nan', 'nan', 'nan', 'fizz', '6.0', 'buzz', '8.0', '9.0',\\n\",\n       \"       'fizz', '11.0', '12.0', '13.0', 'buzz', 'fizz', '16.0', '17.0',\\n\",\n       \"       '18.0', '19.0', 'fizz', 'buzz', '22.0', '23.0', '24.0', 'fizz',\\n\",\n       \"       '26.0', '27.0', 'buzz', '29.0', 'fizz', '31.0', '32.0', '33.0',\\n\",\n       \"       '34.0', nan, '36.0', '37.0', '38.0', '39.0', 'fizz', '41.0',\\n\",\n       \"       'buzz', '43.0', '44.0', 'fizz', '46.0', '47.0', '48.0', 'buzz',\\n\",\n       \"       'fizz'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x % 35 == 0, NA,\\n\",\n    \"    f.x % 5 == 0,  \\\"fizz\\\",\\n\",\n    \"    f.x % 7 == 0,  \\\"buzz\\\",\\n\",\n    \"    True,          as_character(f.x)\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"requested-ladder\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.825575Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.824959Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.853124Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.853650Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([nan, nan, nan, nan,  5., nan,  7., nan, nan,  5., nan, nan, nan,\\n\",\n       \"        7.,  5., nan, nan, nan, nan,  5.,  7., nan, nan, nan,  5., nan,\\n\",\n       \"       nan,  7., nan,  5., nan, nan, nan, nan, 35., nan, nan, nan, nan,\\n\",\n       \"        5., nan,  7., nan, nan,  5., nan, nan, nan,  7.,  5.])\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x % 35 == 0, 35,\\n\",\n    \"    f.x % 5 == 0,  5,\\n\",\n    \"    f.x % 7 == 0,  7,\\n\",\n    \"    True,          NA)\\n\",\n    \") >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"varying-terminology\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.884632Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.883974Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.908989Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.909500Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"RuntimeWarning: invalid value encountered in sqrt\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([-2.        , -1.5       , -1.        , -0.5       ,  0.        ,\\n\",\n       \"        0.70710678,  1.        ,  1.22474487,  1.41421356])\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=seq(-2, 2.1, by=.5))\\n\",\n    \"df >> mutate(y=case_when(\\n\",\n    \"    f.x >= 0, sqrt(f.x),\\n\",\n    \"    True,     f.x\\n\",\n    \")) >> pull(f.y, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"intermediate-edmonton\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.965870Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.965261Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.065510Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.064592Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>robot</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>robot</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>large</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>robot</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>other</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 6 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name    height      mass     gender  species     type\\n\",\n       \"          <object> <float64> <float64>   <object> <object> <object>\\n\",\n       \"0   Luke Skywalker     172.0      77.0  masculine    Human    other\\n\",\n       \"1            C-3PO     167.0      75.0  masculine    Droid    robot\\n\",\n       \"2            R2-D2      96.0      32.0  masculine    Droid    robot\\n\",\n       \"3      Darth Vader     202.0     136.0  masculine    Human    large\\n\",\n       \"..             ...       ...       ...        ...      ...      ...\\n\",\n       \"4      Leia Organa     150.0      49.0   feminine    Human    other\\n\",\n       \"82             Rey       NaN       NaN   feminine    Human    other\\n\",\n       \"83     Poe Dameron       NaN       NaN  masculine    Human    other\\n\",\n       \"84             BB8       NaN       NaN  masculine    Droid    robot\\n\",\n       \"85  Captain Phasma       NaN       NaN        NaN      NaN    other\\n\",\n       \"86   Padmé Amidala     165.0      45.0   feminine    Human    other\\n\",\n       \"\\n\",\n       \"[87 rows x 6 columns]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"  select(f[f.name:f.hair_color], f.gender, f.species) >> \\\\\\n\",\n    \"  mutate(\\n\",\n    \"    type = case_when(\\n\",\n    \"      (f.height > 200) | (f.mass > 200), \\\"large\\\",\\n\",\n    \"      f.species == \\\"Droid\\\"          , \\\"robot\\\",\\n\",\n    \"      True                          , \\\"other\\\"\\n\",\n    \"    )\\n\",\n    \"  )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"metallic-wilderness\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:16.098307Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:16.097560Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.126493Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.120350Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['other', 'robot', 'robot', 'large', 'other', 'other', 'other',\\n\",\n       \"       'robot', 'other', 'other', 'other', 'other', 'large', 'other',\\n\",\n       \"       'other', 'large', 'other', 'other', 'other', 'other', 'other',\\n\",\n       \"       'robot', 'other', 'other', 'other', 'other', 'other', 'other',\\n\",\n       \"       'other', 'other', 'other', 'other', 'other', 'other', 'large',\\n\",\n       \"       'large', 'other', 'other', 'other', 'other', 'other', 'other',\\n\",\n       \"       'other', 'other', 'other', 'other', 'other', 'other', 'other',\\n\",\n       \"       'other', 'other', 'other', 'other', 'large', 'other', 'other',\\n\",\n       \"       'other', 'other', 'other', 'other', 'other', 'other', 'other',\\n\",\n       \"       'other', 'other', 'other', 'other', 'other', 'large', 'large',\\n\",\n       \"       'other', 'other', 'robot', 'other', 'other', 'other', 'large',\\n\",\n       \"       'large', 'other', 'other', 'large', 'other', 'other', 'other',\\n\",\n       \"       'robot', 'other', 'other'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"  mutate(type=case_when(\\n\",\n    \"    (f.height > 200) | (f.mass > 200), \\\"large\\\",\\n\",\n    \"    f.species == \\\"Droid\\\",           \\\"robot\\\",\\n\",\n    \"    True,                           \\\"other\\\"\\n\",\n    \"  )) >> \\\\\\n\",\n    \"  pull(f.type, to=\\\"array\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"closed-student\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/chop.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.286090Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.285455Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:28.515179Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:28.515573Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fchop.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ chop</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Makes data frame shorter by converting rows within each group\\n\",\n       \"into list-columns.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame  \\n\",\n       \"&emsp;&emsp;`cols`: Columns to chop  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Data frame with selected columns chopped  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ unchop</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Makes df longer by expanding list-columns so that each element\\n\",\n       \"of the list-column gets its own row in the output.  \\n\",\n       \"\\n\",\n       \"See https://tidyr.tidyverse.org/reference/chop.html  \\n\",\n       \"\\n\",\n       \"Recycling size-1 elements might be different from `tidyr`  \\n\",\n       \"&emsp;&emsp;>>> df = tibble(x=[1, [2,3]], y=[[2,3], 1])  \\n\",\n       \"&emsp;&emsp;>>> df >> unchop([f.x, f.y])  \\n\",\n       \"&emsp;&emsp;>>> # tibble(x=[1,2,3], y=[2,3,1])  \\n\",\n       \"&emsp;&emsp;>>> # instead of following in tidyr  \\n\",\n       \"&emsp;&emsp;>>> # tibble(x=[1,1,2,3], y=[2,3,1,1])  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame.  \\n\",\n       \"&emsp;&emsp;`cols`: Columns to unchop.  \\n\",\n       \"&emsp;&emsp;`keep_empty`: By default, you get one row of output for each element  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;of the list your unchopping/unnesting.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This means that if there's a size-0 element  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(like NULL or an empty data frame), that entire row will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;dropped from the output.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If you want to preserve all rows, use `keep_empty` = `True` to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;replace size-0 elements with a single row of missing values.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`dtypes`: Providing the dtypes for the output columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Could be a single dtype, which will be applied to all columns, or  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a dictionary of dtypes with keys for the columns and values the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;dtypes.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;For nested data frames, we need to specify `col$a` as key. If `col`  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;is used as key, all columns of the nested data frames will be casted  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;into that dtype.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with selected columns unchopped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(chop, unchop)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:28.543116Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:28.542535Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.066795Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.067215Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>&lt;DF 1x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x      data\\n\",\n       \"  <int64>  <object>\\n\",\n       \"0       1  <DF 3x2>\\n\",\n       \"1       2  <DF 2x2>\\n\",\n       \"2       3  <DF 1x2>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(1, 1, 1, 2, 2, 3), y = c[1:6:1], z = c[6:1:-1])\\n\",\n    \"df >> nest(data = c(f.y, f.z))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.120819Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.119994Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.125071Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.125427Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>[1, 2, 3]</td>\\n\",\n       \"      <td>[6, 5, 4]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>[4, 5]</td>\\n\",\n       \"      <td>[3, 2]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>[6]</td>\\n\",\n       \"      <td>[1]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x          y          z\\n\",\n       \"  <int64>   <object>   <object>\\n\",\n       \"0       1  [1, 2, 3]  [6, 5, 4]\\n\",\n       \"1       2     [4, 5]     [3, 2]\\n\",\n       \"2       3        [6]        [1]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> chop(c(f.y, f.z))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.135078Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.132452Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.170637Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.171085Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x        y\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       2      1.0\\n\",\n       \"1       3      1.0\\n\",\n       \"2       3      2.0\\n\",\n       \"3       4      1.0\\n\",\n       \"4       4      2.0\\n\",\n       \"5       4      3.0\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Unchop\\n\",\n    \"df = tibble(x = c[1:5], y = [[], [1], [1,2], [1,2,3]])\\n\",\n    \"df >> unchop(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.195709Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.194859Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.202582Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.203047Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       2       1\\n\",\n       \"1       3       1\\n\",\n       \"2       3       2\\n\",\n       \"3       4       1\\n\",\n       \"4       4       2\\n\",\n       \"5       4       3\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unchop(f.y, keep_empty=True, dtypes=int)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.210591Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.209992Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.242975Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.243396Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x        y\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       1        a\\n\",\n       \"1       1        1\\n\",\n       \"2       1        2\\n\",\n       \"3       1        3\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c[1:2], y = [\\\"a\\\", [1,2,3]])\\n\",\n    \"df >> unchop(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.251668Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.250803Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.255881Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.256244Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] invalid literal for int() with base 10: 'a'\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    df >> unchop(f.y, dtypes=int)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.265947Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.263748Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.354094Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.354709Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y$x</th>\\n\",\n       \"      <th>y$y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y$x       y$y\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       2       1.0       NaN\\n\",\n       \"1       3       NaN       1.0\\n\",\n       \"2       3       NaN       2.0\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c[1:4], y = [NULL, tibble(x = 1), tibble(y = c[1:3])])\\n\",\n    \"df >> unchop(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.376449Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.375398Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:29.386210Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:29.384289Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y$x</th>\\n\",\n       \"      <th>y$y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y$x       y$y\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       1       NaN       NaN\\n\",\n       \"1       2       1.0       NaN\\n\",\n       \"2       3       NaN       1.0\\n\",\n       \"3       3       NaN       2.0\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unchop(f.y, keep_empty=True)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/coalesce.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"applicable-fault\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.903448Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.902768Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.871433Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.871879Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcoalesce.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ coalesce</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Replace missing values with the first non-missing value\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/coalesce.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`*replace`: Values to replace missing values with.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/coalesce.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(coalesce)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"smoking-gilbert\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.894245Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.893678Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.105408Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.103096Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    5.0\\n\",\n       \"1    4.0\\n\",\n       \"2    3.0\\n\",\n       \"3    0.0\\n\",\n       \"4    2.0\\n\",\n       \"5    0.0\\n\",\n       \"6    1.0\\n\",\n       \"7    0.0\\n\",\n       \"Name: y, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=[5,4,3,NA,2,NA,1,NA])\\n\",\n    \"df >> mutate(y=coalesce(f.x, 0)) >> pull(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"intense-liver\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.132360Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.131696Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.159635Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.158647Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    1.0\\n\",\n       \"1    2.0\\n\",\n       \"2    3.0\\n\",\n       \"3    4.0\\n\",\n       \"4    5.0\\n\",\n       \"Name: m, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"    y=[1,2,NA,NA,5],\\n\",\n    \"    z=[NA,NA,3,4,5]\\n\",\n    \")\\n\",\n    \"df >> mutate(m=coalesce(f.y, f.z)) >> pull(f.m)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/complete.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.998675Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.998111Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:36.207004Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:36.207419Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcomplete.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ complete</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Turns implicit missing values into explicit missing values.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: columns to expand. Columns can be atomic lists.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find all unique combinations of x, y and z, including\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;those not present in the data, supply each variable as a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;separate argument: `expand(df, x, y, z)`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find only the combinations that occur in the data, use\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`nesting`: `expand(df, nesting(x, y, z))`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- You can combine the two forms. For example,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`expand(df, nesting(school_id, student_id), date)` would  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;produce a row for each present school-student combination  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;for all possible dates.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`fill`: A named list that for each variable supplies a single value  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;to use instead of NA for missing combinations.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`explict`: Should both implicit (newly created) and explicit  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(pre-existing) missing values be filled by fill? By default,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;this is TRUE, but if set to FALSE this will limit the fill to only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;implicit missing values.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Data frame with missing values completed  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(complete)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:36.225638Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:36.224907Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:36.764033Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:36.764473Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>item_id</th>\\n\",\n       \"      <th>item_name</th>\\n\",\n       \"      <th>value1</th>\\n\",\n       \"      <th>value2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    group  item_id item_name    value1    value2\\n\",\n       \"  <int64>  <int64>  <object> <float64> <float64>\\n\",\n       \"0       1        1         a       1.0       4.0\\n\",\n       \"1       1        2         b       3.0       6.0\\n\",\n       \"2       2        1         a       NaN       NaN\\n\",\n       \"3       2        2         b       2.0       5.0\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  group = c(c[1:2:1], 1),\\n\",\n    \"  item_id = c(c[1:2:1], 2),\\n\",\n    \"  item_name = c(\\\"a\\\", \\\"b\\\", \\\"b\\\"),\\n\",\n    \"  value1 = c[1:3:1],\\n\",\n    \"  value2 = c[4:6:1]\\n\",\n    \")\\n\",\n    \"df >> complete(f.group, nesting(f.item_id, f.item_name))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:36.825971Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:36.825401Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:36.886733Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:36.887338Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>item_id</th>\\n\",\n       \"      <th>item_name</th>\\n\",\n       \"      <th>value1</th>\\n\",\n       \"      <th>value2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    group  item_id item_name    value1    value2\\n\",\n       \"  <int64>  <int64>  <object> <float64> <float64>\\n\",\n       \"0       1        1         a       1.0       4.0\\n\",\n       \"1       1        2         b       3.0       6.0\\n\",\n       \"2       2        1         a       0.0       NaN\\n\",\n       \"3       2        2         b       2.0       5.0\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> complete(f.group, nesting(f.item_id, f.item_name), fill=dict(value1=0))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.7.8 64-bit ('base': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/context.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"3d8dbd18\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.688903Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.687968Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.757532Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.758081Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcontext.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cur_group_id</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the current group id\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The current group id  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cur_group_rows</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the current group row indices\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The current group rows  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cur_data</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the current dataframe\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The current dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cur_data_all</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the current data for the current group including\\n\",\n       \"the grouping variables  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The current dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cur_column</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the current column\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`_name`: The column name  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The current column  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/context.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(cur_group_id, cur_group_rows, cur_data, cur_data_all, cur_column, book='context')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"ec43ebdc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.769370Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.767355Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.044934Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.045340Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g       n\\n\",\n       \"  <object> <int64>\\n\",\n       \"0        a       1\\n\",\n       \"1        b       2\\n\",\n       \"2        c       3\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  g=['a'] + ['b'] * 2 + ['c'] * 3,\\n\",\n    \"  x=runif(6),\\n\",\n    \"  y=runif(6)\\n\",\n    \")\\n\",\n    \"gf = df >> group_by(f.g)\\n\",\n    \"\\n\",\n    \"gf >> summarise(n = n())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"d162c09b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.060058Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.059390Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.063439Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.064000Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.879733</td>\\n\",\n       \"      <td>0.242456</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.789550</td>\\n\",\n       \"      <td>0.165711</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.073877</td>\\n\",\n       \"      <td>0.198040</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.677826</td>\\n\",\n       \"      <td>0.186310</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.324069</td>\\n\",\n       \"      <td>0.212226</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.589881</td>\\n\",\n       \"      <td>0.990174</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         g         x         y\\n\",\n       \"  <object> <float64> <float64>\\n\",\n       \"0        a  0.879733  0.242456\\n\",\n       \"1        b  0.789550  0.165711\\n\",\n       \"2        b  0.073877  0.198040\\n\",\n       \"3        c  0.677826  0.186310\\n\",\n       \"4        c  0.324069  0.212226\\n\",\n       \"5        c  0.589881  0.990174\\n\",\n       \"[TibbleGrouped: g (n=3)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"78aae172\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.093244Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.092669Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.251043Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.251600Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.879733</td>\\n\",\n       \"      <td>0.242456</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.789550</td>\\n\",\n       \"      <td>0.165711</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.073877</td>\\n\",\n       \"      <td>0.198040</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.677826</td>\\n\",\n       \"      <td>0.186310</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.324069</td>\\n\",\n       \"      <td>0.212226</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.589881</td>\\n\",\n       \"      <td>0.990174</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         g         x         y      id\\n\",\n       \"  <object> <float64> <float64> <int64>\\n\",\n       \"0        a  0.879733  0.242456       0\\n\",\n       \"1        b  0.789550  0.165711       1\\n\",\n       \"2        b  0.073877  0.198040       1\\n\",\n       \"3        c  0.677826  0.186310       2\\n\",\n       \"4        c  0.324069  0.212226       2\\n\",\n       \"5        c  0.589881  0.990174       2\\n\",\n       \"[TibbleGrouped: g (n=3)]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf >> mutate(id=cur_group_id()) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"49c59913\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.293049Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.292380Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.301115Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.301811Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>row</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>[0]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>[1, 2]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>[3, 4, 5]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g        row\\n\",\n       \"  <object>   <object>\\n\",\n       \"0        a        [0]\\n\",\n       \"1        b     [1, 2]\\n\",\n       \"2        c  [3, 4, 5]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf >> summarise(row=cur_group_rows()) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"cb760a8a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.335103Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.334457Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.348919Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.349292Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>&lt;DF 1x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>&lt;DF 1x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>&lt;DF 1x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g      data\\n\",\n       \"  <object>  <object>\\n\",\n       \"0        a  <DF 1x1>\\n\",\n       \"1        b  <DF 1x1>\\n\",\n       \"2        c  <DF 1x1>\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_group = gf >> summarise(data=cur_group())\\n\",\n    \"gf_group \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"4c25f162\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.367887Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.367244Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.381979Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.382350Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    <DF 1x1>\\n\",\n       \"1    <DF 1x1>\\n\",\n       \"2    <DF 1x1>\\n\",\n       \"Name: data, dtype: object\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_group >> pull(f.data)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"71996f23\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.447148Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.446024Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.467264Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.467729Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>&lt;DF 1x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g      data\\n\",\n       \"  <object>  <object>\\n\",\n       \"0        a  <DF 1x2>\\n\",\n       \"1        b  <DF 2x2>\\n\",\n       \"2        c  <DF 3x2>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_data = gf >> summarise(data=cur_data())\\n\",\n    \"gf_data\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"9b37d097\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.496469Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.495880Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.515602Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.516019Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[          x         y\\n\",\n       \"   <float64> <float64>\\n\",\n       \" 0  0.879733  0.242456,\\n\",\n       \"           x         y\\n\",\n       \"   <float64> <float64>\\n\",\n       \" 1  0.789550  0.165711\\n\",\n       \" 2  0.073877  0.198040,\\n\",\n       \"           x         y\\n\",\n       \"   <float64> <float64>\\n\",\n       \" 3  0.677826  0.186310\\n\",\n       \" 4  0.324069  0.212226\\n\",\n       \" 5  0.589881  0.990174]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_data >> pull(f.data, to='list')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"03c07299\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.549672Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.548821Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.555222Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.555691Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>&lt;DF 1x3&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>&lt;DF 2x3&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>&lt;DF 3x3&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g      data\\n\",\n       \"  <object>  <object>\\n\",\n       \"0        a  <DF 1x3>\\n\",\n       \"1        b  <DF 2x3>\\n\",\n       \"2        c  <DF 3x3>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_data_all = gf >> summarise(data=cur_data_all())\\n\",\n    \"gf_data_all\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"4cc41680\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.571425Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.570212Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.578675Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.579169Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[         g         x         y\\n\",\n       \"   <object> <float64> <float64>\\n\",\n       \" 0        a  0.879733  0.242456,\\n\",\n       \"          g         x         y\\n\",\n       \"   <object> <float64> <float64>\\n\",\n       \" 1        b  0.789550  0.165711\\n\",\n       \" 2        b  0.073877  0.198040,\\n\",\n       \"          g         x         y\\n\",\n       \"   <object> <float64> <float64>\\n\",\n       \" 3        c  0.677826  0.186310\\n\",\n       \" 4        c  0.324069  0.212226\\n\",\n       \" 5        c  0.589881  0.990174]\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf_data_all >> pull(f.data, to='list')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"fe4097d2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.595194Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.593255Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.671560Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.672013Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x 0.7739296633011361</td>\\n\",\n       \"      <td>y 0.05878489331508395</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x 0.6233885082054422</td>\\n\",\n       \"      <td>y 0.027460112154048803</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x 0.005457753705443728</td>\\n\",\n       \"      <td>y 0.03921965587769912</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>x 0.45944873370090106</td>\\n\",\n       \"      <td>y 0.034711398724083777</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>x 0.10502100613889181</td>\\n\",\n       \"      <td>y 0.04504004423820979</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>x 0.3479600358358678</td>\\n\",\n       \"      <td>y 0.9804449881028017</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        x                       y\\n\",\n       \"                 <object>                <object>\\n\",\n       \"0    x 0.7739296633011361   y 0.05878489331508395\\n\",\n       \"1    x 0.6233885082054422  y 0.027460112154048803\\n\",\n       \"2  x 0.005457753705443728   y 0.03921965587769912\\n\",\n       \"3   x 0.45944873370090106  y 0.034711398724083777\\n\",\n       \"4   x 0.10502100613889181   y 0.04504004423820979\\n\",\n       \"5    x 0.3479600358358678    y 0.9804449881028017\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> select(f.x, f.y) >> mutate(\\n\",\n    \"    across(\\n\",\n    \"        everything(), \\n\",\n    \"        lambda x, cc: [cc + ' '] * x.shape[0] + (x**2).astype(str), cc=cur_column()\\n\",\n    \"    )\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"c99b8dee\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:24.695778Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:24.695126Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:24.699137Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:24.699704Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>x 0.7739296633011361</td>\\n\",\n       \"      <td>y 0.05878489331508395</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>x 0.6233885082054422</td>\\n\",\n       \"      <td>y 0.027460112154048803</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>x 0.005457753705443728</td>\\n\",\n       \"      <td>y 0.03921965587769912</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>x 0.45944873370090106</td>\\n\",\n       \"      <td>y 0.034711398724083777</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>x 0.10502100613889181</td>\\n\",\n       \"      <td>y 0.04504004423820979</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>x 0.3479600358358678</td>\\n\",\n       \"      <td>y 0.9804449881028017</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         g                       x                       y\\n\",\n       \"  <object>                <object>                <object>\\n\",\n       \"0        a    x 0.7739296633011361   y 0.05878489331508395\\n\",\n       \"1        b    x 0.6233885082054422  y 0.027460112154048803\\n\",\n       \"2        b  x 0.005457753705443728   y 0.03921965587769912\\n\",\n       \"3        c   x 0.45944873370090106  y 0.034711398724083777\\n\",\n       \"4        c   x 0.10502100613889181   y 0.04504004423820979\\n\",\n       \"5        c    x 0.3479600358358678    y 0.9804449881028017\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# or you can use x.name, since x is a Series\\n\",\n    \"df >> mutate(across(\\n\",\n    \"    [f.x, f.y], \\n\",\n    \"    lambda x: [x.name + ' '] * x.shape[0] + (x**2).astype(str)\\n\",\n    \"))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/count.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"floral-roberts\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:21.123723Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:21.123037Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:22.446611Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:22.447112Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcount.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ count</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Count the number of rows in each group\\n\",\n       \"\\n\",\n       \"Original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/count.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: Variables, or functions of variables.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use desc() to sort a variable in descending order.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`wt`: A variable or function of variables to weight by.  \\n\",\n       \"&emsp;&emsp;`sort`: If TRUE, the result will be sorted by the count.  \\n\",\n       \"&emsp;&emsp;`name`: The name of the count column.  \\n\",\n       \"&emsp;&emsp;`_drop`: If `False`, keep grouping variables even if they are not used.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Original API does not support this.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs that apply with mutate  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the same number of rows as the number of groups.  \\n\",\n       \"&emsp;&emsp;The output has the following properties:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;All rows appear in the output, but (usually) in a different place.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Columns are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Groups are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Data frame attributes are preserved.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ tally</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Count the number of rows in each group\\n\",\n       \"\\n\",\n       \"Original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/count.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`wt`: A variable or function of variables to weight by.  \\n\",\n       \"&emsp;&emsp;`sort`: If TRUE, the result will be sorted by the count.  \\n\",\n       \"&emsp;&emsp;`name`: The name of the count column.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the same number of rows as the number of groups.  \\n\",\n       \"&emsp;&emsp;The output has the following properties:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;All rows appear in the output, but (usually) in a different place.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Columns are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Groups are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Data frame attributes are preserved.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ add_count</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add a count column to a data frame\\n\",\n       \"\\n\",\n       \"Original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/count.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: Variables, or functions of variables.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use desc() to sort a variable in descending order.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`wt`: A variable or function of variables to weight by.  \\n\",\n       \"&emsp;&emsp;`sort`: If TRUE, the result will be sorted by the count.  \\n\",\n       \"&emsp;&emsp;`name`: The name of the count column.  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs that apply with mutate  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the same number of rows as the number of groups.  \\n\",\n       \"&emsp;&emsp;The output has the following properties:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;All rows appear in the output, but (usually) in a different place.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Columns are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Groups are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Data frame attributes are preserved.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ add_tally</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add a count column to a data frame\\n\",\n       \"\\n\",\n       \"Original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/count.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`wt`: A variable or function of variables to weight by.  \\n\",\n       \"&emsp;&emsp;`sort`: If TRUE, the result will be sorted by the count.  \\n\",\n       \"&emsp;&emsp;`name`: The name of the count column.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the same number of rows as the number of groups.  \\n\",\n       \"&emsp;&emsp;The output has the following properties:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;All rows appear in the output, but (usually) in a different place.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Columns are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Groups are not modified.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Data frame attributes are preserved.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/count.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(count, tally, add_count, add_tally)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"vietnamese-scheduling\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:22.499698Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:22.498972Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:22.761006Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:22.758057Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Rodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Yoda's species</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Mon Calamari</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Ewok</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Neimodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Toydarian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Zabrak</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Vulptereen</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>Toong</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>Cerean</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Tholothian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>Iktotchi</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>Quermian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Chagrian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>Geonosian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>Mirialan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Clawdite</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>Aleena</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>Skakoan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>Muun</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           species       n\\n\",\n       \"          <object> <int64>\\n\",\n       \"0            Human      35\\n\",\n       \"1            Droid       6\\n\",\n       \"2          Wookiee       2\\n\",\n       \"3           Rodian       1\\n\",\n       \"4             Hutt       1\\n\",\n       \"5   Yoda's species       1\\n\",\n       \"6       Trandoshan       1\\n\",\n       \"7     Mon Calamari       1\\n\",\n       \"8             Ewok       1\\n\",\n       \"9        Sullustan       1\\n\",\n       \"10       Neimodian       1\\n\",\n       \"11          Gungan       3\\n\",\n       \"12             NaN       4\\n\",\n       \"13       Toydarian       1\\n\",\n       \"14             Dug       1\\n\",\n       \"15          Zabrak       2\\n\",\n       \"16         Twi'lek       2\\n\",\n       \"17      Vulptereen       1\\n\",\n       \"18           Xexto       1\\n\",\n       \"19           Toong       1\\n\",\n       \"20          Cerean       1\\n\",\n       \"21        Nautolan       1\\n\",\n       \"22      Tholothian       1\\n\",\n       \"23        Iktotchi       1\\n\",\n       \"24        Quermian       1\\n\",\n       \"25         Kel Dor       1\\n\",\n       \"26        Chagrian       1\\n\",\n       \"27       Geonosian       1\\n\",\n       \"28        Mirialan       2\\n\",\n       \"29        Clawdite       1\\n\",\n       \"30        Besalisk       1\\n\",\n       \"31        Kaminoan       2\\n\",\n       \"32          Aleena       1\\n\",\n       \"33         Skakoan       1\\n\",\n       \"34            Muun       1\\n\",\n       \"35         Togruta       1\\n\",\n       \"36         Kaleesh       1\\n\",\n       \"37          Pau'an       1\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> count(f.species)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"upset-capture\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:22.933200Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:22.932569Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.167260Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.166667Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Zabrak</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Mirialan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Clawdite</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Iktotchi</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Skakoan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Muun</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Geonosian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Chagrian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>Quermian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>Aleena</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>Tholothian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Cerean</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>Toong</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>Vulptereen</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>Toydarian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>Neimodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>Ewok</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>Mon Calamari</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>Yoda's species</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>Rodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: species (n=38)\"\n      ],\n      \"text/plain\": [\n       \"           species       n\\n\",\n       \"          <object> <int64>\\n\",\n       \"0            Human      35\\n\",\n       \"1            Droid       6\\n\",\n       \"2              NaN       4\\n\",\n       \"3           Gungan       3\\n\",\n       \"4          Twi'lek       2\\n\",\n       \"5           Zabrak       2\\n\",\n       \"6         Kaminoan       2\\n\",\n       \"7         Mirialan       2\\n\",\n       \"8          Wookiee       2\\n\",\n       \"9         Besalisk       1\\n\",\n       \"10        Clawdite       1\\n\",\n       \"11        Iktotchi       1\\n\",\n       \"12         Skakoan       1\\n\",\n       \"13            Muun       1\\n\",\n       \"14       Geonosian       1\\n\",\n       \"15        Chagrian       1\\n\",\n       \"16         Togruta       1\\n\",\n       \"17         Kel Dor       1\\n\",\n       \"18        Quermian       1\\n\",\n       \"19          Aleena       1\\n\",\n       \"20      Tholothian       1\\n\",\n       \"21           Xexto       1\\n\",\n       \"22          Cerean       1\\n\",\n       \"23           Toong       1\\n\",\n       \"24         Kaleesh       1\\n\",\n       \"25      Vulptereen       1\\n\",\n       \"26             Dug       1\\n\",\n       \"27       Toydarian       1\\n\",\n       \"28       Neimodian       1\\n\",\n       \"29       Sullustan       1\\n\",\n       \"30            Ewok       1\\n\",\n       \"31    Mon Calamari       1\\n\",\n       \"32      Trandoshan       1\\n\",\n       \"33  Yoda's species       1\\n\",\n       \"34            Hutt       1\\n\",\n       \"35          Rodian       1\\n\",\n       \"36        Nautolan       1\\n\",\n       \"37          Pau'an       1\\n\",\n       \"[TibbleGrouped: species (n=38)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> count(f.species, sort=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"invisible-stage\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.200566Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.183269Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.216997Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.217355Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>60</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>16</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>hermaphroditic</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: sex, gender (n=6)\"\n      ],\n      \"text/plain\": [\n       \"              sex     gender       n\\n\",\n       \"         <object>   <object> <int64>\\n\",\n       \"0            male  masculine      60\\n\",\n       \"1          female   feminine      16\\n\",\n       \"2            none  masculine       5\\n\",\n       \"3             NaN        NaN       4\\n\",\n       \"4  hermaphroditic  masculine       1\\n\",\n       \"5            none   feminine       1\\n\",\n       \"[TibbleGrouped: sex, gender (n=6)]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> count(f.sex, f.gender, sort=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"sought-republican\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.231211Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.230584Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.272491Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.273010Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>birth_decade</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>20.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>30.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>40.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>44</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>60.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>600.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>900.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>90.0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>70.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>100.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    birth_decade       n\\n\",\n       \"       <float64> <int64>\\n\",\n       \"0           20.0       6\\n\",\n       \"1          110.0       1\\n\",\n       \"2           30.0       4\\n\",\n       \"3           40.0       6\\n\",\n       \"4           50.0       8\\n\",\n       \"5            NaN      44\\n\",\n       \"6           60.0       4\\n\",\n       \"7          200.0       1\\n\",\n       \"8          600.0       1\\n\",\n       \"9          900.0       1\\n\",\n       \"10          80.0       2\\n\",\n       \"11          10.0       1\\n\",\n       \"12          90.0       3\\n\",\n       \"13          70.0       4\\n\",\n       \"14         100.0       1\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> count(birth_decade=round(f.birth_year, -1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"extended-advantage\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.293306Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.279175Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.297207Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.297633Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    gender       n\\n\",\n       \"  <object> <int64>\\n\",\n       \"0     male       1\\n\",\n       \"1   female       2\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tribble(\\n\",\n    \"  f.name,    f.gender,   f.runs,\\n\",\n    \"  \\\"Max\\\",    \\\"male\\\",       10,\\n\",\n    \"  \\\"Sandra\\\", \\\"female\\\",      1,\\n\",\n    \"  \\\"Susan\\\",  \\\"female\\\",      4\\n\",\n    \")\\n\",\n    \"# counts rows:\\n\",\n    \"df >> count(f.gender)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"posted-group\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.333270Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.325562Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.336782Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.337132Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    gender       n\\n\",\n       \"  <object> <int64>\\n\",\n       \"0     male      10\\n\",\n       \"1   female       5\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> count(f.gender, wt=f.runs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"perceived-category\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.347891Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.347255Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.351736Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.351285Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>87</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        n\\n\",\n       \"  <int64>\\n\",\n       \"0      87\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> tally()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"agricultural-spider\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.370009Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.359697Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.428354Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.425173Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Rodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Yoda's species</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Mon Calamari</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Ewok</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Neimodian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Toydarian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Zabrak</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Vulptereen</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>Toong</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>Cerean</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Tholothian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>Iktotchi</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>Quermian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Chagrian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>Geonosian</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>Mirialan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Clawdite</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>Aleena</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>Skakoan</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>Muun</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           species       n\\n\",\n       \"          <object> <int64>\\n\",\n       \"0            Human      35\\n\",\n       \"1            Droid       6\\n\",\n       \"2          Wookiee       2\\n\",\n       \"3           Rodian       1\\n\",\n       \"4             Hutt       1\\n\",\n       \"5   Yoda's species       1\\n\",\n       \"6       Trandoshan       1\\n\",\n       \"7     Mon Calamari       1\\n\",\n       \"8             Ewok       1\\n\",\n       \"9        Sullustan       1\\n\",\n       \"10       Neimodian       1\\n\",\n       \"11          Gungan       3\\n\",\n       \"12             NaN       4\\n\",\n       \"13       Toydarian       1\\n\",\n       \"14             Dug       1\\n\",\n       \"15          Zabrak       2\\n\",\n       \"16         Twi'lek       2\\n\",\n       \"17      Vulptereen       1\\n\",\n       \"18           Xexto       1\\n\",\n       \"19           Toong       1\\n\",\n       \"20          Cerean       1\\n\",\n       \"21        Nautolan       1\\n\",\n       \"22      Tholothian       1\\n\",\n       \"23        Iktotchi       1\\n\",\n       \"24        Quermian       1\\n\",\n       \"25         Kel Dor       1\\n\",\n       \"26        Chagrian       1\\n\",\n       \"27       Geonosian       1\\n\",\n       \"28        Mirialan       2\\n\",\n       \"29        Clawdite       1\\n\",\n       \"30        Besalisk       1\\n\",\n       \"31        Kaminoan       2\\n\",\n       \"32          Aleena       1\\n\",\n       \"33         Skakoan       1\\n\",\n       \"34            Muun       1\\n\",\n       \"35         Togruta       1\\n\",\n       \"36         Kaleesh       1\\n\",\n       \"37          Pau'an       1\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> group_by(f.species) >> tally() \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"outside-removal\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.463340Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.462638Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.531276Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.529823Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>runs</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Max</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Sandra</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Susan</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: gender (n=2)\"\n      ],\n      \"text/plain\": [\n       \"      name   gender    runs       n\\n\",\n       \"  <object> <object> <int64> <int64>\\n\",\n       \"0      Max     male      10      10\\n\",\n       \"1   Sandra   female       1       5\\n\",\n       \"2    Susan   female       4       5\\n\",\n       \"[TibbleGrouped: gender (n=2)]\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_count(f.gender, wt=f.runs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"neutral-utility\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.540843Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.539733Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.554457Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.555011Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>runs</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Max</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Sandra</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Susan</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name   gender    runs\\n\",\n       \"  <object> <object> <int64>\\n\",\n       \"0      Max     male      10\\n\",\n       \"1   Sandra   female       1\\n\",\n       \"2    Susan   female       4\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"amber-chamber\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.588810Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.588218Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:23.594267Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:23.594900Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>runs</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Max</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Sandra</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Susan</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name   gender    runs       n\\n\",\n       \"  <object> <object> <int64> <int64>\\n\",\n       \"0      Max     male      10      15\\n\",\n       \"1   Sandra   female       1      15\\n\",\n       \"2    Susan   female       4      15\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> add_tally(wt=f.runs)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/cumall.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"minute-millennium\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:06.609806Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:06.608996Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.700823Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.701237Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fcumall.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cummean</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Cumulative mean\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/cumall.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`na_rm`: If `True`, remove missing values before computing.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of cumulative means  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cumsum</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Cumulative sums\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The cumulative sums  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cumall</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get cumulative bool. All cases after first False\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/cumall.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A logical vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of cumulative conjunctions  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cumany</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get cumulative bool. All cases after first True\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/cumany.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A logical vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of cumulative disjunctions  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cumany</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get cumulative bool. All cases after first True\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/cumany.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A logical vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of cumulative disjunctions  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/cumall.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"import numpy\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(cummean, cumsum, cumall, cumany, cumany, book='cumall')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"separate-coating\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.714938Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.714168Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.723294Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.724014Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    1.00\\n\",\n       \"1    2.00\\n\",\n       \"2    3.00\\n\",\n       \"3    2.75\\n\",\n       \"4    2.60\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = [1, 3, 5, 2, 2]\\n\",\n    \"cummean(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"religious-voltage\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.737874Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.737171Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.754908Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.755360Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([1.  , 2.  , 3.  , 2.75, 2.6 ])\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"cumsum(x) / seq_along(x) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"assigned-marks\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.768170Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.767400Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.777813Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.778359Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     True\\n\",\n       \"1     True\\n\",\n       \"2    False\\n\",\n       \"3    False\\n\",\n       \"4    False\\n\",\n       \"dtype: bool\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"cumall(numpy.array(x) < 5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"composed-midwest\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.788717Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.788024Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.797432Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.797881Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    False\\n\",\n       \"1     True\\n\",\n       \"2     True\\n\",\n       \"3     True\\n\",\n       \"4     True\\n\",\n       \"dtype: bool\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"cumany(numpy.array(x) == 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"compliant-response\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.815885Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.814566Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.946033Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.945310Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>date</th>\\n\",\n       \"      <th>balance</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2020-01-04</td>\\n\",\n       \"      <td>-25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2020-01-05</td>\\n\",\n       \"      <td>-50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2020-01-06</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>2020-01-07</td>\\n\",\n       \"      <td>120</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         date  balance\\n\",\n       \"     <object>  <int64>\\n\",\n       \"3  2020-01-04      -25\\n\",\n       \"4  2020-01-05      -50\\n\",\n       \"5  2020-01-06       30\\n\",\n       \"6  2020-01-07      120\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  date = as_date([f\\\"2020-01-0{i+1}\\\" for i in range(7)]),\\n\",\n    \"  balance = c(100, 50, 25, -25, -50, 30, 120)\\n\",\n    \")\\n\",\n    \"df >> filter(cumany(f.balance < 0))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"flying-senator\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.965583Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.964851Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.974194Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.974985Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>date</th>\\n\",\n       \"      <th>balance</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2020-01-01</td>\\n\",\n       \"      <td>100</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2020-01-02</td>\\n\",\n       \"      <td>50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2020-01-03</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         date  balance\\n\",\n       \"     <object>  <int64>\\n\",\n       \"0  2020-01-01      100\\n\",\n       \"1  2020-01-02       50\\n\",\n       \"2  2020-01-03       25\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> filter(cumall(~(f.balance < 0)))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/desc.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"important-empty\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.744602Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.743026Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:39.602512Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:39.602933Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fdesc.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ desc</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Transform a vector into a format that will be sorted in descending order\\n\",\n       \"\\n\",\n       \"This is useful within arrange().  \\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/desc.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: vector to transform  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The descending order of x  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.base import factor, letters\\n\",\n    \"from datar.dplyr import desc\\n\",\n    \"\\n\",\n    \"nb_header(desc)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"equal-software\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:39.613373Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:39.612755Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:39.620797Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:39.621622Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([ -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10])\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"desc(range(1,11))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"delayed-lincoln\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:39.642189Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:39.641582Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:39.651348Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:39.651772Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([ -0.,  -1.,  -2.,  -3.,  -4.,  -5.,  -6.,  -7.,  -8.,  -9., -10.,\\n\",\n       \"       -11., -12., -13., -14., -15., -16., -17., -18., -19., -20., -21.,\\n\",\n       \"       -22., -23., -24., -25.])\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"desc(factor(letters))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/distinct.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"incoming-criminal\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:01.856078Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:01.855450Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:02.766193Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:02.766583Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fdistinct.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ distinct</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Filter a data frame based on conditions\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/distinct.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: Variables to filter by.  \\n\",\n       \"&emsp;&emsp;`keep_all`: If `True`, keep all rows that match.  \\n\",\n       \"&emsp;&emsp;`_preserve`: If `True`, keep grouping variables even if they are not used.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ n_distinct</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Count the number of distinct values\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/distinct.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`na_rm`: If `True`, remove missing values before counting.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The number of distinct values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/distinct.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(distinct, n_distinct, book='distinct')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"graduate-bonus\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:02.778943Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:02.778340Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:02.916126Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:02.916559Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"100\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  x=sample(range(10), 100, replace=True),\\n\",\n    \"  y=sample(range(10), 100, replace=True)\\n\",\n    \")\\n\",\n    \"nrow(df)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"liable-measure\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:02.965042Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:02.964300Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:02.972991Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:02.973410Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"59\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nrow(distinct(df))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"weird-insight\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.056160Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.052663Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.068917Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.069286Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"59\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(f.x, f.y) >> nrow()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"terminal-label\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.085467Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.084916Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.095546Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.095980Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x\\n\",\n       \"   <int64>\\n\",\n       \"0        4\\n\",\n       \"1        6\\n\",\n       \"2        1\\n\",\n       \"3        8\\n\",\n       \"4        5\\n\",\n       \"6        9\\n\",\n       \"14       2\\n\",\n       \"19       7\\n\",\n       \"22       0\\n\",\n       \"38       3\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(f.x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"ignored-hearts\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.115485Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.114717Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.202525Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.204951Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         y\\n\",\n       \"   <int64>\\n\",\n       \"0        4\\n\",\n       \"1        3\\n\",\n       \"2        1\\n\",\n       \"3        7\\n\",\n       \"4        8\\n\",\n       \"6        6\\n\",\n       \"10       9\\n\",\n       \"13       0\\n\",\n       \"16       5\\n\",\n       \"18       2\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"reasonable-envelope\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.244549Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.243874Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.262177Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.262613Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x       y\\n\",\n       \"   <int64> <int64>\\n\",\n       \"0        4       4\\n\",\n       \"1        6       3\\n\",\n       \"2        1       1\\n\",\n       \"3        8       7\\n\",\n       \"4        5       8\\n\",\n       \"6        9       6\\n\",\n       \"14       2       0\\n\",\n       \"19       7       8\\n\",\n       \"22       0       6\\n\",\n       \"38       3       0\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(f.x, _keep_all=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"historical-chapter\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.283879Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.283009Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.296509Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.297024Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x       y\\n\",\n       \"   <int64> <int64>\\n\",\n       \"0        4       4\\n\",\n       \"1        6       3\\n\",\n       \"2        1       1\\n\",\n       \"3        8       7\\n\",\n       \"4        5       8\\n\",\n       \"6        9       6\\n\",\n       \"10       1       9\\n\",\n       \"13       6       0\\n\",\n       \"16       4       5\\n\",\n       \"18       6       2\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(f.y, _keep_all=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"short-output\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.317929Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.317326Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.325870Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.326366Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>diff</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      diff\\n\",\n       \"   <int64>\\n\",\n       \"0        0\\n\",\n       \"1        3\\n\",\n       \"3        1\\n\",\n       \"8        5\\n\",\n       \"10       8\\n\",\n       \"13       6\\n\",\n       \"14       2\\n\",\n       \"18       4\\n\",\n       \"36       7\\n\",\n       \"89       9\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> distinct(diff=abs(f.x-f.y))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"possible-tours\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.394487Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.393835Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.401685Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.402119Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>79</th>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>67 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   hair_color   skin_color eye_color\\n\",\n       \"     <object>     <object>  <object>\\n\",\n       \"0       blond         fair      blue\\n\",\n       \"1         NaN         gold    yellow\\n\",\n       \"2         NaN  white, blue       red\\n\",\n       \"3        none        white    yellow\\n\",\n       \"..        ...          ...       ...\\n\",\n       \"4       brown        light     brown\\n\",\n       \"79       none         pale     white\\n\",\n       \"81      black         dark      dark\\n\",\n       \"82      brown        light     hazel\\n\",\n       \"84       none         none     black\\n\",\n       \"85    unknown      unknown   unknown\\n\",\n       \"\\n\",\n       \"[67 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> distinct(across(contains(\\\"color\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"radio-title\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.467684Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.467114Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.531743Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.532145Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=2)\"\n      ],\n      \"text/plain\": [\n       \"        g       x\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\\n\",\n       \"2       2       2\\n\",\n       \"[TibbleGrouped: g (n=2)]\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  g=[1, 1, 2, 2],\\n\",\n    \"  x=[1, 1, 2, 1]\\n\",\n    \") >> group_by(f.g)\\n\",\n    \"\\n\",\n    \"df >> distinct(f.x) \"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/drop_na.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"ca9d87cf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:02.908562Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:02.907945Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.847521Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.848746Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fdrop_na.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ drop_na</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Drop rows containing missing values\\n\",\n       \"\\n\",\n       \"See https://tidyr.tidyverse.org/reference/drop_na.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame.  \\n\",\n       \"&emsp;&emsp;`*columns`: Columns to inspect for missing values.  \\n\",\n       \"&emsp;&emsp;`_how`: How to select the rows to drop  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- all: All columns of `columns` to be `NA`s\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- any: Any columns of `columns` to be `NA`s\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(tidyr doesn't support this argument)  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Dataframe with rows with NAs dropped and indexes dropped  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/drop_na.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(drop_na)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"495d9468\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.872775Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.869619Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:04.092841Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:04.093341Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(1, 2, NA), y = c(\\\"a\\\", NA, \\\"b\\\"))\\n\",\n    \"df >> drop_na()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"f04b6d40\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:04.122198Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:04.121085Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:04.130329Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:04.130799Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\\n\",\n       \"1       2.0      NaN\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> drop_na(f.x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"38c638ec\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:04.160640Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:04.160021Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:04.166910Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:04.167297Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"vars = [\\\"y\\\"]\\n\",\n    \"df >> drop_na(f.x, any_of(vars))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"e4b2c11a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:04.180991Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:04.180288Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:04.188341Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:04.188774Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\\n\",\n       \"1       2.0      NaN\\n\",\n       \"2       NaN        b\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# how_='any' or how_='all'\\n\",\n    \"# not supported by tidyr\\n\",\n    \"df >> drop_na(how_='all')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"446314c4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:04.203254Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:04.202457Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:04.211838Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:04.212261Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> drop_na(how_='any')\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/enframe.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.178008Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.177298Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.066519Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.066940Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fenframe.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ enframe</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Converts mappings or lists to one- or two-column data frames.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: a list, a dictionary or a dataframe with one or two columns  \\n\",\n       \"&emsp;&emsp;`name`: and  \\n\",\n       \"&emsp;&emsp;`value`: value Names of the columns that store the names and values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If `None`, a one-column dataframe is returned.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`value` cannot be `None`  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with two columns if `name` is not None (default) or  \\n\",\n       \"&emsp;&emsp;one-column otherwise.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ deframe</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Converts two-column data frames to a dictionary\\n\",\n       \"using the first column as name and the second column as value.  \\n\",\n       \"If the input has only one column, a list.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A dictionary or a list if only one column in the data frame.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tibble.tidyverse.org/reference/enframe.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.tibble import *\\n\",\n    \"from datar.base import seq\\n\",\n    \"\\n\",\n    \"nb_header(enframe, deframe, book='enframe')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.085129Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.084214Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.089910Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.090440Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     name   value\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       0       1\\n\",\n       \"1       1       2\\n\",\n       \"2       2       3\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"enframe(seq(1,3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.113080Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.112505Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.120948Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.121344Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name   value\\n\",\n       \"  <object> <int64>\\n\",\n       \"0        a       5\\n\",\n       \"1        b       7\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"enframe(dict(a=5, b=7))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.132693Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.131955Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.139014Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.139426Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>one</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>two</td>\\n\",\n       \"      <td>[2, 3]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>three</td>\\n\",\n       \"      <td>[4, 5, 6]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name      value\\n\",\n       \"  <object>   <object>\\n\",\n       \"0      one          1\\n\",\n       \"1      two     [2, 3]\\n\",\n       \"2    three  [4, 5, 6]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"enframe(dict(one=1, two=[2,3], three=[4,5,6]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.151230Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.150441Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.156108Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.156544Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{0: 3, 1: 2, 2: 1}\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"deframe(enframe(seq(3,1)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.175628Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.172529Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.301296Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.301845Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([1, 2, 3])\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"deframe(tibble(a=seq(1,3)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.309147Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.307277Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:31.322373Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:31.322957Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([array([1, 2, 3])], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"deframe(tibble(a=[seq(1,3)]))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.7.8 64-bit ('base': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/expand.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"imposed-davis\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:13.577475Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:13.576458Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:14.863613Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:14.864080Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fexpand.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ expand</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Generates all combination of variables found in a dataset.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: and,  \\n\",\n       \"&emsp;&emsp;`**kwargs`: columns to expand. Columns can be atomic lists.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find all unique combinations of x, y and z, including\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;those not present in the data, supply each variable as a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;separate argument: `expand(df, x, y, z)`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find only the combinations that occur in the data, use\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`nesting`: `expand(df, nesting(x, y, z))`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- You can combine the two forms. For example,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`expand(df, nesting(school_id, student_id), date)` would  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;produce a row for each present school-student combination  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;for all possible dates.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with all combination of variables.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ nesting</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### A helper that only finds combinations already present in the data.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*args`: and,  \\n\",\n       \"&emsp;&emsp;`**kwargs`: columns to expand. Columns can be atomic lists.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find all unique combinations of x, y and z, including\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;those not present in the data, supply each variable as a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;separate argument: `expand(df, x, y, z)`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find only the combinations that occur in the data, use\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`nesting`: `expand(df, nesting(x, y, z))`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- You can combine the two forms. For example,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`expand(df, nesting(school_id, student_id), date)` would  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;produce a row for each present school-student combination  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;for all possible dates.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with all combinations in data.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ crossing</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### A wrapper around `expand_grid()` that de-duplicates and sorts its inputs\\n\",\n       \"\\n\",\n       \"When values are not specified by literal `list`, they will be sorted.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*args`: and,  \\n\",\n       \"&emsp;&emsp;`**kwargs`: columns to expand. Columns can be atomic lists.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find all unique combinations of x, y and z, including\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;those not present in the data, supply each variable as a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;separate argument: `expand(df, x, y, z)`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- To find only the combinations that occur in the data, use\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`nesting`: `expand(df, nesting(x, y, z))`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- You can combine the two forms. For example,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`expand(df, nesting(school_id, student_id), date)` would  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;produce a row for each present school-student combination  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;for all possible dates.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with values deduplicated and sorted.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/expand.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(expand, nesting, crossing)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"persistent-amino\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:14.918494Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:14.917685Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.099993Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.100386Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>weights</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2.522472</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>0.206341</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>-0.667409</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>0.887561</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>-1.317738</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>-0.228718</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type    year       size   weights\\n\",\n       \"  <object> <int64> <category> <float64>\\n\",\n       \"0    apple    2010         XS  2.522472\\n\",\n       \"1   orange    2010          S  0.206341\\n\",\n       \"2    apple    2012          M -0.667409\\n\",\n       \"3   orange    2010          S  0.887561\\n\",\n       \"4   orange    2010          S -1.317738\\n\",\n       \"5   orange    2012          M -0.228718\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"\\n\",\n    \"fruits = tibble(\\n\",\n    \"  type   = c(\\\"apple\\\", \\\"orange\\\", \\\"apple\\\", \\\"orange\\\", \\\"orange\\\", \\\"orange\\\"),\\n\",\n    \"  year   = c(2010, 2010, 2012, 2010, 2010, 2012),\\n\",\n    \"  size  =  factor(\\n\",\n    \"    c(\\\"XS\\\", \\\"S\\\",  \\\"M\\\", \\\"S\\\", \\\"S\\\", \\\"M\\\"),\\n\",\n    \"    levels = c(\\\"XS\\\", \\\"S\\\", \\\"M\\\", \\\"L\\\")\\n\",\n    \"  ),\\n\",\n    \"  weights = rnorm(6)\\n\",\n    \")\\n\",\n    \"fruits \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"backed-short\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.137962Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.135563Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.304537Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.307272Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type\\n\",\n       \"  <object>\\n\",\n       \"0    apple\\n\",\n       \"1   orange\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"asian-texture\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.389332Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.388776Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.495831Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.496225Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type       size\\n\",\n       \"  <object> <category>\\n\",\n       \"0    apple         XS\\n\",\n       \"1    apple          S\\n\",\n       \"2    apple          M\\n\",\n       \"3    apple          L\\n\",\n       \"4   orange         XS\\n\",\n       \"5   orange          S\\n\",\n       \"6   orange          M\\n\",\n       \"7   orange          L\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type, f.size) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"realistic-addiction\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.532936Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.532104Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.613973Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.614538Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size    year\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"0     apple         XS    2010\\n\",\n       \"1     apple         XS    2012\\n\",\n       \"2     apple          S    2010\\n\",\n       \"3     apple          S    2012\\n\",\n       \"4     apple          M    2010\\n\",\n       \"5     apple          M    2012\\n\",\n       \"6     apple          L    2010\\n\",\n       \"7     apple          L    2012\\n\",\n       \"8    orange         XS    2010\\n\",\n       \"9    orange         XS    2012\\n\",\n       \"10   orange          S    2010\\n\",\n       \"11   orange          S    2012\\n\",\n       \"12   orange          M    2010\\n\",\n       \"13   orange          M    2012\\n\",\n       \"14   orange          L    2010\\n\",\n       \"15   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type, f.size, f.year)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"packed-edinburgh\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.640595Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.640010Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.766353Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.766709Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type\\n\",\n       \"  <object>\\n\",\n       \"0    apple\\n\",\n       \"1   orange\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(nesting(f.type))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"opposed-installation\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.782939Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.782375Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.843231Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.843693Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type       size\\n\",\n       \"  <object> <category>\\n\",\n       \"0    apple         XS\\n\",\n       \"1   orange          S\\n\",\n       \"2    apple          M\\n\",\n       \"3   orange          M\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(nesting(f.type, f.size))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"difficult-norfolk\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.880587Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.880004Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.913491Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.914138Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      type       size    year\\n\",\n       \"  <object> <category> <int64>\\n\",\n       \"0    apple         XS    2010\\n\",\n       \"1   orange          S    2010\\n\",\n       \"2    apple          M    2012\\n\",\n       \"3   orange          M    2012\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(nesting(f.type, f.size, f.year))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"corporate-maple\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.923115Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.922506Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.957822Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.957294Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>_VAR_2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size  _VAR_2\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"0     apple         XS    2010\\n\",\n       \"1     apple         XS    2011\\n\",\n       \"2     apple         XS    2012\\n\",\n       \"3     apple          S    2010\\n\",\n       \"4     apple          S    2011\\n\",\n       \"5     apple          S    2012\\n\",\n       \"6     apple          M    2010\\n\",\n       \"7     apple          M    2011\\n\",\n       \"8     apple          M    2012\\n\",\n       \"9     apple          L    2010\\n\",\n       \"10    apple          L    2011\\n\",\n       \"11    apple          L    2012\\n\",\n       \"12   orange         XS    2010\\n\",\n       \"13   orange         XS    2011\\n\",\n       \"14   orange         XS    2012\\n\",\n       \"15   orange          S    2010\\n\",\n       \"16   orange          S    2011\\n\",\n       \"17   orange          S    2012\\n\",\n       \"18   orange          M    2010\\n\",\n       \"19   orange          M    2011\\n\",\n       \"20   orange          M    2012\\n\",\n       \"21   orange          L    2010\\n\",\n       \"22   orange          L    2011\\n\",\n       \"23   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type, f.size, full_seq(f.year, 1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"developed-floor\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.969739Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.968313Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.998503Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.998872Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>_VAR_2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size  _VAR_2\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"0     apple         XS    2010\\n\",\n       \"1     apple         XS    2011\\n\",\n       \"2     apple         XS    2012\\n\",\n       \"3     apple          S    2010\\n\",\n       \"4     apple          S    2011\\n\",\n       \"5     apple          S    2012\\n\",\n       \"6     apple          M    2010\\n\",\n       \"7     apple          M    2011\\n\",\n       \"8     apple          M    2012\\n\",\n       \"9     apple          L    2010\\n\",\n       \"10    apple          L    2011\\n\",\n       \"11    apple          L    2012\\n\",\n       \"12   orange         XS    2010\\n\",\n       \"13   orange         XS    2011\\n\",\n       \"14   orange         XS    2012\\n\",\n       \"15   orange          S    2010\\n\",\n       \"16   orange          S    2011\\n\",\n       \"17   orange          S    2012\\n\",\n       \"18   orange          M    2010\\n\",\n       \"19   orange          M    2011\\n\",\n       \"20   orange          M    2012\\n\",\n       \"21   orange          L    2010\\n\",\n       \"22   orange          L    2011\\n\",\n       \"23   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type, f.size, seq(2010, 2012))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"alternate-addiction\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:16.051676Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:16.050970Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.065169Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.065694Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size    year\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"0     apple         XS    2010\\n\",\n       \"1     apple         XS    2011\\n\",\n       \"2     apple         XS    2012\\n\",\n       \"3     apple          S    2010\\n\",\n       \"4     apple          S    2011\\n\",\n       \"5     apple          S    2012\\n\",\n       \"6     apple          M    2010\\n\",\n       \"7     apple          M    2011\\n\",\n       \"8     apple          M    2012\\n\",\n       \"9     apple          L    2010\\n\",\n       \"10    apple          L    2011\\n\",\n       \"11    apple          L    2012\\n\",\n       \"12   orange         XS    2010\\n\",\n       \"13   orange         XS    2011\\n\",\n       \"14   orange         XS    2012\\n\",\n       \"15   orange          S    2010\\n\",\n       \"16   orange          S    2011\\n\",\n       \"17   orange          S    2012\\n\",\n       \"18   orange          M    2010\\n\",\n       \"19   orange          M    2011\\n\",\n       \"20   orange          M    2012\\n\",\n       \"21   orange          L    2010\\n\",\n       \"22   orange          L    2011\\n\",\n       \"23   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> expand(f.type, f.size, year=seq(2010, 2012))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"regular-employment\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:16.100570Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:16.099899Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.137413Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.138469Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size    year\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"0     apple         XS    2010\\n\",\n       \"1     apple         XS    2012\\n\",\n       \"2     apple          S    2010\\n\",\n       \"3     apple          S    2012\\n\",\n       \"4     apple          M    2010\\n\",\n       \"5     apple          M    2012\\n\",\n       \"6     apple          L    2010\\n\",\n       \"7     apple          L    2012\\n\",\n       \"8    orange         XS    2010\\n\",\n       \"9    orange         XS    2012\\n\",\n       \"10   orange          S    2010\\n\",\n       \"11   orange          S    2012\\n\",\n       \"12   orange          M    2010\\n\",\n       \"13   orange          M    2012\\n\",\n       \"14   orange          L    2010\\n\",\n       \"15   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"all = fruits >> expand(f.type, f.size, f.year)\\n\",\n    \"all\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"olive-tucson\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:16.236056Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:16.235177Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.353065Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.354380Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type       size    year\\n\",\n       \"   <object> <category> <int64>\\n\",\n       \"1     apple         XS    2012\\n\",\n       \"2     apple          S    2010\\n\",\n       \"3     apple          S    2012\\n\",\n       \"4     apple          M    2010\\n\",\n       \"6     apple          L    2010\\n\",\n       \"7     apple          L    2012\\n\",\n       \"8    orange         XS    2010\\n\",\n       \"9    orange         XS    2012\\n\",\n       \"13   orange          S    2012\\n\",\n       \"14   orange          M    2010\\n\",\n       \"16   orange          L    2010\\n\",\n       \"17   orange          L    2012\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"all >> anti_join(fruits)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"random-bowling\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:16.366841Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:16.365974Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:16.427464Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:16.428041Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>type</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>size</th>\\n\",\n       \"      <th>weights</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>2.522472</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>-0.667409</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>apple</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>XS</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>0.206341</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>0.887561</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>-1.317738</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>S</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>-0.228718</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       type    year       size   weights\\n\",\n       \"   <object> <int64> <category> <float64>\\n\",\n       \"0     apple    2010         XS  2.522472\\n\",\n       \"1     apple    2012         XS       NaN\\n\",\n       \"2     apple    2010          S       NaN\\n\",\n       \"3     apple    2012          S       NaN\\n\",\n       \"4     apple    2010          M       NaN\\n\",\n       \"5     apple    2012          M -0.667409\\n\",\n       \"6     apple    2010          L       NaN\\n\",\n       \"7     apple    2012          L       NaN\\n\",\n       \"8    orange    2010         XS       NaN\\n\",\n       \"9    orange    2012         XS       NaN\\n\",\n       \"10   orange    2010          S  0.206341\\n\",\n       \"11   orange    2010          S  0.887561\\n\",\n       \"12   orange    2010          S -1.317738\\n\",\n       \"13   orange    2012          S       NaN\\n\",\n       \"14   orange    2010          M       NaN\\n\",\n       \"15   orange    2012          M -0.228718\\n\",\n       \"16   orange    2010          L       NaN\\n\",\n       \"17   orange    2012          L       NaN\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruits >> right_join(all)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/expand_grid.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"respiratory-oriental\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:02.594424Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:02.593842Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.465029Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.465435Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fexpand_grid.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ expand_grid</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Expand a grid\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`*args`: Additional numeric vectors  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Additional keyword arguments  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The expanded grid  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/expand_grid.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(expand_grid)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"driven-cornwall\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.507985Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.507421Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.690295Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.690760Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\\n\",\n       \"1       1       2\\n\",\n       \"2       2       1\\n\",\n       \"3       2       2\\n\",\n       \"4       3       1\\n\",\n       \"5       3       2\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"expand_grid(x=seq(1,3), y=seq(1,2))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"structural-assembly\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.723628Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.722356Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.731096Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.731540Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>l1</th>\\n\",\n       \"      <th>l2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>C</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>D</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>E</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>671</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>V</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>672</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>W</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>673</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>X</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>674</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>Y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>675</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>Z</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>676 rows × 2 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          l1       l2\\n\",\n       \"    <object> <object>\\n\",\n       \"0          a        A\\n\",\n       \"1          a        B\\n\",\n       \"2          a        C\\n\",\n       \"3          a        D\\n\",\n       \"..       ...      ...\\n\",\n       \"4          a        E\\n\",\n       \"671        z        V\\n\",\n       \"672        z        W\\n\",\n       \"673        z        X\\n\",\n       \"674        z        Y\\n\",\n       \"675        z        Z\\n\",\n       \"\\n\",\n       \"[676 rows x 2 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"expand_grid(l1=letters, l2=LETTERS)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"nervous-sterling\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.760022Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.759343Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.798135Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.798629Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>df$x</th>\\n\",\n       \"      <th>df$y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     df$x    df$y       z\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       2       1\\n\",\n       \"1       1       2       2\\n\",\n       \"2       1       2       3\\n\",\n       \"3       2       1       1\\n\",\n       \"4       2       1       2\\n\",\n       \"5       2       1       3\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"expand_grid(df=tibble(x=[1,2], y=c(2, 1)), z=[1,2,3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"super-champagne\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:03.824682Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:03.823796Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:03.888499Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:03.889119Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x1$a</th>\\n\",\n       \"      <th>x1$b</th>\\n\",\n       \"      <th>x2$a</th>\\n\",\n       \"      <th>x2$b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     x1$a    x1$b    x2$a    x2$b\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       1       3       5       7\\n\",\n       \"1       1       3       6       8\\n\",\n       \"2       2       4       5       7\\n\",\n       \"3       2       4       6       8\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"expand_grid(x1=tibble(a=[1,2], b=[3,4]), x2=tibble(a=[5,6], b=[7,8]))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/extract.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"processed-allah\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:56.819249Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:56.813812Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:57.713922Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:57.714378Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fextract.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ extract</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Given a regular expression with capturing groups, extract() turns each\\n\",\n       \"group into a new column. If the groups don't match, or the input is NA,  \\n\",\n       \"the output will be NA.  \\n\",\n       \"\\n\",\n       \"See https://tidyr.tidyverse.org/reference/extract.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`col`: Column name or position.  \\n\",\n       \"&emsp;&emsp;`into`: Names of new variables to create as character vector.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use None to omit the variable in the output.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`regex`: a regular expression used to extract the desired values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;There should be one group (defined by ()) for each element of into.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`remove`: If TRUE, remove input column from output data frame.  \\n\",\n       \"&emsp;&emsp;`convert`: The universal type for the extracted columns or a dict for  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;individual ones  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Dataframe with extracted columns.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/extract.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(extract)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"caring-munich\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:57.721455Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:57.720888Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:57.915716Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:57.916273Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         A\\n\",\n       \"  <object>\\n\",\n       \"0      NaN\\n\",\n       \"1        a\\n\",\n       \"2        a\\n\",\n       \"3        b\\n\",\n       \"4        d\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(NA, \\\"a-b\\\", \\\"a-d\\\", \\\"b-c\\\", \\\"d-e\\\"))\\n\",\n    \"df >> extract(f.x, \\\"A\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"registered-investment\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:57.929149Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:57.928412Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:57.931807Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:57.932199Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"      <td>e</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         A        B\\n\",\n       \"  <object> <object>\\n\",\n       \"0      NaN      NaN\\n\",\n       \"1        a        b\\n\",\n       \"2        a        d\\n\",\n       \"3        b        c\\n\",\n       \"4        d        e\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> extract(f.x, c(\\\"A\\\", \\\"B\\\"), r\\\"(\\\\w+)-(\\\\w+)\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"celtic-mortality\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:57.944560Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:57.943905Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:57.946848Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:57.947195Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         A        B\\n\",\n       \"  <object> <object>\\n\",\n       \"0      NaN      NaN\\n\",\n       \"1        a        b\\n\",\n       \"2        a        d\\n\",\n       \"3        b        c\\n\",\n       \"4      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> extract(f.x, c(\\\"A\\\", \\\"B\\\"), r\\\"([a-d]+)-([a-d]+)\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"8deb631b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:57.958227Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:57.956839Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:57.981449Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:57.981988Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>ac</td>\\n\",\n       \"      <td>bd</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b\\n\",\n       \"  <object> <object>\\n\",\n       \"0       ac       bd\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# combine multiple columns\\n\",\n    \"df = tibble(x='abcd')\\n\",\n    \"df >> extract(f.x, ['a', 'b', 'a', 'b'], r'(.)(.)(.)(.)')\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/fill.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"armed-shield\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:31.394446Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:31.393014Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:32.393689Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:32.394219Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Ffill.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fill</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Fills missing values in selected columns using the next or\\n\",\n       \"previous entry.  \\n\",\n       \"\\n\",\n       \"See https://tidyr.tidyverse.org/reference/fill.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A dataframe  \\n\",\n       \"&emsp;&emsp;`*columns`: Columns to fill  \\n\",\n       \"&emsp;&emsp;`_direction`: Direction in which to fill missing values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Currently either \\\"down\\\" (the default), \\\"up\\\",  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"downup\\\" (i.e. first down and then up) or  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"updown\\\" (first up and then down).  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with NAs being replaced.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/fill.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(fill)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"coral-musician\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:32.409593Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:32.408665Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:32.412799Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:32.413197Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>quarter</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>sales</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2000.0</td>\\n\",\n       \"      <td>66013</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>69182</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>53175</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>21001</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2001.0</td>\\n\",\n       \"      <td>46036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>58842</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>44568</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>50197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2002.0</td>\\n\",\n       \"      <td>39113</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>41668</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>30144</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>52897</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2004.0</td>\\n\",\n       \"      <td>32129</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>67686</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>31768</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>49094</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    quarter      year   sales\\n\",\n       \"   <object> <float64> <int64>\\n\",\n       \"0        Q1    2000.0   66013\\n\",\n       \"1        Q2       NaN   69182\\n\",\n       \"2        Q3       NaN   53175\\n\",\n       \"3        Q4       NaN   21001\\n\",\n       \"4        Q1    2001.0   46036\\n\",\n       \"5        Q2       NaN   58842\\n\",\n       \"6        Q3       NaN   44568\\n\",\n       \"7        Q4       NaN   50197\\n\",\n       \"8        Q1    2002.0   39113\\n\",\n       \"9        Q2       NaN   41668\\n\",\n       \"10       Q3       NaN   30144\\n\",\n       \"11       Q4       NaN   52897\\n\",\n       \"12       Q1    2004.0   32129\\n\",\n       \"13       Q2       NaN   67686\\n\",\n       \"14       Q3       NaN   31768\\n\",\n       \"15       Q4       NaN   49094\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"sales = tribble(\\n\",\n    \"  f.quarter, f.year, f.sales,\\n\",\n    \"  \\\"Q1\\\",      2000,   66013,\\n\",\n    \"  \\\"Q2\\\",        NA,   69182,\\n\",\n    \"  \\\"Q3\\\",        NA,   53175,\\n\",\n    \"  \\\"Q4\\\",        NA,   21001,\\n\",\n    \"  \\\"Q1\\\",      2001,   46036,\\n\",\n    \"  \\\"Q2\\\",        NA,   58842,\\n\",\n    \"  \\\"Q3\\\",        NA,   44568,\\n\",\n    \"  \\\"Q4\\\",        NA,   50197,\\n\",\n    \"  \\\"Q1\\\",      2002,   39113,\\n\",\n    \"  \\\"Q2\\\",        NA,   41668,\\n\",\n    \"  \\\"Q3\\\",        NA,   30144,\\n\",\n    \"  \\\"Q4\\\",        NA,   52897,\\n\",\n    \"  \\\"Q1\\\",      2004,   32129,\\n\",\n    \"  \\\"Q2\\\",        NA,   67686,\\n\",\n    \"  \\\"Q3\\\",        NA,   31768,\\n\",\n    \"  \\\"Q4\\\",        NA,   49094\\n\",\n    \")\\n\",\n    \"sales\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"dramatic-break\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:32.436403Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:32.435653Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:32.478246Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:32.478714Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>quarter</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>sales</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2000.0</td>\\n\",\n       \"      <td>66013</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>2000.0</td>\\n\",\n       \"      <td>69182</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>2000.0</td>\\n\",\n       \"      <td>53175</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>2000.0</td>\\n\",\n       \"      <td>21001</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2001.0</td>\\n\",\n       \"      <td>46036</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>2001.0</td>\\n\",\n       \"      <td>58842</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>2001.0</td>\\n\",\n       \"      <td>44568</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>2001.0</td>\\n\",\n       \"      <td>50197</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2002.0</td>\\n\",\n       \"      <td>39113</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>2002.0</td>\\n\",\n       \"      <td>41668</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>2002.0</td>\\n\",\n       \"      <td>30144</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>2002.0</td>\\n\",\n       \"      <td>52897</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Q1</td>\\n\",\n       \"      <td>2004.0</td>\\n\",\n       \"      <td>32129</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Q2</td>\\n\",\n       \"      <td>2004.0</td>\\n\",\n       \"      <td>67686</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Q3</td>\\n\",\n       \"      <td>2004.0</td>\\n\",\n       \"      <td>31768</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Q4</td>\\n\",\n       \"      <td>2004.0</td>\\n\",\n       \"      <td>49094</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    quarter      year   sales\\n\",\n       \"   <object> <float64> <int64>\\n\",\n       \"0        Q1    2000.0   66013\\n\",\n       \"1        Q2    2000.0   69182\\n\",\n       \"2        Q3    2000.0   53175\\n\",\n       \"3        Q4    2000.0   21001\\n\",\n       \"4        Q1    2001.0   46036\\n\",\n       \"5        Q2    2001.0   58842\\n\",\n       \"6        Q3    2001.0   44568\\n\",\n       \"7        Q4    2001.0   50197\\n\",\n       \"8        Q1    2002.0   39113\\n\",\n       \"9        Q2    2002.0   41668\\n\",\n       \"10       Q3    2002.0   30144\\n\",\n       \"11       Q4    2002.0   52897\\n\",\n       \"12       Q1    2004.0   32129\\n\",\n       \"13       Q2    2004.0   67686\\n\",\n       \"14       Q3    2004.0   31768\\n\",\n       \"15       Q4    2004.0   49094\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"sales >> fill(f.year)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"intelligent-scanner\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:32.495256Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:32.485963Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:32.498776Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:32.499177Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>rank</th>\\n\",\n       \"      <th>pet_type</th>\\n\",\n       \"      <th>breed</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>Boston Terrier</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>Retrievers (Labrador)</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>Retrievers (Golden)</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>French Bulldogs</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>Bulldogs</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>Dog</td>\\n\",\n       \"      <td>Beagles</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>Persian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>Maine Coon</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>Ragdoll</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>Exotic</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>Siamese</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>Cat</td>\\n\",\n       \"      <td>American Short</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      rank pet_type                  breed\\n\",\n       \"   <int64> <object>               <object>\\n\",\n       \"0        1      Dog         Boston Terrier\\n\",\n       \"1        2      Dog  Retrievers (Labrador)\\n\",\n       \"2        3      Dog    Retrievers (Golden)\\n\",\n       \"3        4      Dog        French Bulldogs\\n\",\n       \"4        5      Dog               Bulldogs\\n\",\n       \"5        6      Dog                Beagles\\n\",\n       \"6        1      Cat                Persian\\n\",\n       \"7        2      Cat             Maine Coon\\n\",\n       \"8        3      Cat                Ragdoll\\n\",\n       \"9        4      Cat                 Exotic\\n\",\n       \"10       5      Cat                Siamese\\n\",\n       \"11       6      Cat         American Short\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tidy_pets = tribble(\\n\",\n    \"  f.rank,  f.pet_type, f.breed,\\n\",\n    \"  1,          NA,      \\\"Boston Terrier\\\",\\n\",\n    \"  2,          NA,      \\\"Retrievers (Labrador)\\\",\\n\",\n    \"  3,          NA,      \\\"Retrievers (Golden)\\\",\\n\",\n    \"  4,          NA,      \\\"French Bulldogs\\\",\\n\",\n    \"  5,          NA,      \\\"Bulldogs\\\",\\n\",\n    \"  6,       \\\"Dog\\\",      \\\"Beagles\\\",\\n\",\n    \"  1,          NA,      \\\"Persian\\\",\\n\",\n    \"  2,          NA,      \\\"Maine Coon\\\",\\n\",\n    \"  3,          NA,      \\\"Ragdoll\\\",\\n\",\n    \"  4,          NA,      \\\"Exotic\\\",\\n\",\n    \"  5,          NA,      \\\"Siamese\\\",\\n\",\n    \"  6,       \\\"Cat\\\",      \\\"American Short\\\"\\n\",\n    \")\\n\",\n    \"tidy_pets >> fill(f.pet_type, _direction = \\\"up\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"level-assistant\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:32.509886Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:32.507992Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:32.598870Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:32.598415Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>role</th>\\n\",\n       \"      <th>n_squirrels</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Sam</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Mara</td>\\n\",\n       \"      <td>Scorekeeper</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Jesse</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Tom</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Mike</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Rachael</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Sydekea</td>\\n\",\n       \"      <td>Scorekeeper</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Gabriela</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Derrick</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Kara</td>\\n\",\n       \"      <td>Scorekeeper</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Emily</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>Danielle</td>\\n\",\n       \"      <td>Observer</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=3)\"\n      ],\n      \"text/plain\": [\n       \"     group      name         role  n_squirrels\\n\",\n       \"   <int64>  <object>     <object>    <float64>\\n\",\n       \"0        1       Sam     Observer          8.0\\n\",\n       \"1        1      Mara  Scorekeeper          8.0\\n\",\n       \"2        1     Jesse     Observer          8.0\\n\",\n       \"3        1       Tom     Observer          8.0\\n\",\n       \"4        2      Mike     Observer         14.0\\n\",\n       \"5        2   Rachael     Observer         14.0\\n\",\n       \"6        2   Sydekea  Scorekeeper         14.0\\n\",\n       \"7        2  Gabriela     Observer         14.0\\n\",\n       \"8        3   Derrick     Observer          9.0\\n\",\n       \"9        3      Kara  Scorekeeper          9.0\\n\",\n       \"10       3     Emily     Observer          9.0\\n\",\n       \"11       3  Danielle     Observer          9.0\\n\",\n       \"[TibbleGrouped: group (n=3)]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"squirrels = tribble(\\n\",\n    \"  f.group,    f.name,        f.role, f.n_squirrels,\\n\",\n    \"  1,           \\\"Sam\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  1,          \\\"Mara\\\", \\\"Scorekeeper\\\",             8,\\n\",\n    \"  1,         \\\"Jesse\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  1,           \\\"Tom\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  2,          \\\"Mike\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  2,       \\\"Rachael\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  2,       \\\"Sydekea\\\", \\\"Scorekeeper\\\",            14,\\n\",\n    \"  2,      \\\"Gabriela\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  3,       \\\"Derrick\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  3,          \\\"Kara\\\", \\\"Scorekeeper\\\",             9,\\n\",\n    \"  3,         \\\"Emily\\\",    \\\"Observer\\\",            NA,\\n\",\n    \"  3,      \\\"Danielle\\\",    \\\"Observer\\\",            NA\\n\",\n    \")\\n\",\n    \"        \\n\",\n    \"squirrels >> \\\\\\n\",\n    \"  group_by(f.group) >> \\\\\\n\",\n    \"  fill(f.n_squirrels, _direction = \\\"downup\\\") \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"little-practice\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/filter-joins.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:41.370298Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:41.368998Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.302245Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.302701Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Ffilter-joins.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ semi_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Semi join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ anti_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Anti join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/filter-joins.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import band_members, band_instruments\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(semi_join, anti_join, book='filter-joins')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band\\n\",\n       \"  <object> <object>\\n\",\n       \"0     Mick   Stones\\n\",\n       \"1     John  Beatles\\n\",\n       \"2     Paul  Beatles\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Keith</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name    plays\\n\",\n       \"  <object> <object>\\n\",\n       \"0     John   guitar\\n\",\n       \"1     Paul     bass\\n\",\n       \"2    Keith   guitar\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_instruments\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.371916Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.370067Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.398547Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.399395Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band\\n\",\n       \"  <object> <object>\\n\",\n       \"1     John  Beatles\\n\",\n       \"2     Paul  Beatles\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> semi_join(band_instruments)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.426844Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.426222Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.437212Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.436497Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band\\n\",\n       \"  <object> <object>\\n\",\n       \"0     Mick   Stones\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> anti_join(band_instruments, by={'name': 'name'})\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/filter.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:19.245063Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:19.244401Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.145099Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.144206Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Ffilter_.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ filter_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Filter a data frame based on conditions\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/filter.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*conditions`: Conditions to filter by.  \\n\",\n       \"&emsp;&emsp;`_preserve`: If `True`, keep grouping variables even if they are not used.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/filter.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(filter)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.178910Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.178291Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.185838Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.186271Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Owen Lars</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>120.0</td>\\n\",\n       \"      <td>brown, grey</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>52.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Beru Whitesun lars</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>47.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Biggs Darklighter</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>24.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Obi-Wan Kenobi</td>\\n\",\n       \"      <td>182.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>auburn, white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue-gray</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Stewjon</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Wilhuff Tarkin</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn, grey</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Eriadu</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Han Solo</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>29.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Corellia</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>Wedge Antilles</td>\\n\",\n       \"      <td>170.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Corellia</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Jek Tono Porkins</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bestine IV</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>Palpatine</td>\\n\",\n       \"      <td>170.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>Boba Fett</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>78.2</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>31.5</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>Lando Calrissian</td>\\n\",\n       \"      <td>177.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>31.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Socorro</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>Lobot</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>37.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bespin</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>Mon Mothma</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>auburn</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Chandrila</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>Arvel Crynyd</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>Qui-Gon Jinn</td>\\n\",\n       \"      <td>193.0</td>\\n\",\n       \"      <td>89.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>92.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>Finis Valorum</td>\\n\",\n       \"      <td>170.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>91.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Coruscant</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>Shmi Skywalker</td>\\n\",\n       \"      <td>163.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>Mace Windu</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Haruun Kal</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>Gregar Typho</td>\\n\",\n       \"      <td>185.0</td>\\n\",\n       \"      <td>85.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>57</th>\\n\",\n       \"      <td>Cordé</td>\\n\",\n       \"      <td>157.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>58</th>\\n\",\n       \"      <td>Cliegg Lars</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>62</th>\\n\",\n       \"      <td>Dormé</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>63</th>\\n\",\n       \"      <td>Dooku</td>\\n\",\n       \"      <td>193.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Serenno</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>64</th>\\n\",\n       \"      <td>Bail Prestor Organa</td>\\n\",\n       \"      <td>191.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>tan</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>67.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>65</th>\\n\",\n       \"      <td>Jango Fett</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>tan</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>66.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Concord Dawn</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>70</th>\\n\",\n       \"      <td>Jocasta Nu</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Coruscant</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>78</th>\\n\",\n       \"      <td>Raymus Antilles</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>Finn</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>46.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                   name    height      mass     hair_color skin_color  \\\\\\n\",\n       \"               <object> <float64> <float64>       <object>   <object>   \\n\",\n       \"0        Luke Skywalker     172.0      77.0          blond       fair   \\n\",\n       \"3           Darth Vader     202.0     136.0           none      white   \\n\",\n       \"4           Leia Organa     150.0      49.0          brown      light   \\n\",\n       \"5             Owen Lars     178.0     120.0    brown, grey      light   \\n\",\n       \"6    Beru Whitesun lars     165.0      75.0          brown      light   \\n\",\n       \"8     Biggs Darklighter     183.0      84.0          black      light   \\n\",\n       \"9        Obi-Wan Kenobi     182.0      77.0  auburn, white       fair   \\n\",\n       \"10     Anakin Skywalker     188.0      84.0          blond       fair   \\n\",\n       \"11       Wilhuff Tarkin     180.0       NaN   auburn, grey       fair   \\n\",\n       \"13             Han Solo     180.0      80.0          brown       fair   \\n\",\n       \"16       Wedge Antilles     170.0      77.0          brown       fair   \\n\",\n       \"17     Jek Tono Porkins     180.0     110.0          brown       fair   \\n\",\n       \"19            Palpatine     170.0      75.0           grey       pale   \\n\",\n       \"20            Boba Fett     183.0      78.2          black       fair   \\n\",\n       \"23     Lando Calrissian     177.0      79.0          black       dark   \\n\",\n       \"24                Lobot     175.0      79.0           none      light   \\n\",\n       \"26           Mon Mothma     150.0       NaN         auburn       fair   \\n\",\n       \"27         Arvel Crynyd       NaN       NaN          brown       fair   \\n\",\n       \"30         Qui-Gon Jinn     193.0      89.0          brown       fair   \\n\",\n       \"32        Finis Valorum     170.0       NaN          blond       fair   \\n\",\n       \"40       Shmi Skywalker     163.0       NaN          black       fair   \\n\",\n       \"47           Mace Windu     188.0      84.0           none       dark   \\n\",\n       \"56         Gregar Typho     185.0      85.0          black       dark   \\n\",\n       \"57                Cordé     157.0       NaN          brown      light   \\n\",\n       \"58          Cliegg Lars     183.0       NaN          brown       fair   \\n\",\n       \"62                Dormé     165.0       NaN          brown      light   \\n\",\n       \"63                Dooku     193.0      80.0          white       fair   \\n\",\n       \"64  Bail Prestor Organa     191.0       NaN          black        tan   \\n\",\n       \"65           Jango Fett     183.0      79.0          black        tan   \\n\",\n       \"70           Jocasta Nu     167.0       NaN          white       fair   \\n\",\n       \"78      Raymus Antilles     188.0      79.0          brown      light   \\n\",\n       \"81                 Finn       NaN       NaN          black       dark   \\n\",\n       \"82                  Rey       NaN       NaN          brown      light   \\n\",\n       \"83          Poe Dameron       NaN       NaN          brown      light   \\n\",\n       \"86        Padmé Amidala     165.0      45.0          brown      light   \\n\",\n       \"\\n\",\n       \"    eye_color  birth_year      sex     gender     homeworld  species  \\n\",\n       \"     <object>   <float64> <object>   <object>      <object> <object>  \\n\",\n       \"0        blue        19.0     male  masculine      Tatooine    Human  \\n\",\n       \"3      yellow        41.9     male  masculine      Tatooine    Human  \\n\",\n       \"4       brown        19.0   female   feminine      Alderaan    Human  \\n\",\n       \"5        blue        52.0     male  masculine      Tatooine    Human  \\n\",\n       \"6        blue        47.0   female   feminine      Tatooine    Human  \\n\",\n       \"8       brown        24.0     male  masculine      Tatooine    Human  \\n\",\n       \"9   blue-gray        57.0     male  masculine       Stewjon    Human  \\n\",\n       \"10       blue        41.9     male  masculine      Tatooine    Human  \\n\",\n       \"11       blue        64.0     male  masculine        Eriadu    Human  \\n\",\n       \"13      brown        29.0     male  masculine      Corellia    Human  \\n\",\n       \"16      hazel        21.0     male  masculine      Corellia    Human  \\n\",\n       \"17       blue         NaN     male  masculine    Bestine IV    Human  \\n\",\n       \"19     yellow        82.0     male  masculine         Naboo    Human  \\n\",\n       \"20      brown        31.5     male  masculine        Kamino    Human  \\n\",\n       \"23      brown        31.0     male  masculine       Socorro    Human  \\n\",\n       \"24       blue        37.0     male  masculine        Bespin    Human  \\n\",\n       \"26       blue        48.0   female   feminine     Chandrila    Human  \\n\",\n       \"27      brown         NaN     male  masculine           NaN    Human  \\n\",\n       \"30       blue        92.0     male  masculine           NaN    Human  \\n\",\n       \"32       blue        91.0     male  masculine     Coruscant    Human  \\n\",\n       \"40      brown        72.0   female   feminine      Tatooine    Human  \\n\",\n       \"47      brown        72.0     male  masculine    Haruun Kal    Human  \\n\",\n       \"56      brown         NaN     male  masculine         Naboo    Human  \\n\",\n       \"57      brown         NaN   female   feminine         Naboo    Human  \\n\",\n       \"58       blue        82.0     male  masculine      Tatooine    Human  \\n\",\n       \"62      brown         NaN   female   feminine         Naboo    Human  \\n\",\n       \"63      brown       102.0     male  masculine       Serenno    Human  \\n\",\n       \"64      brown        67.0     male  masculine      Alderaan    Human  \\n\",\n       \"65      brown        66.0     male  masculine  Concord Dawn    Human  \\n\",\n       \"70       blue         NaN   female   feminine     Coruscant    Human  \\n\",\n       \"78      brown         NaN     male  masculine      Alderaan    Human  \\n\",\n       \"81       dark         NaN     male  masculine           NaN    Human  \\n\",\n       \"82      hazel         NaN   female   feminine           NaN    Human  \\n\",\n       \"83      brown         NaN     male  masculine           NaN    Human  \\n\",\n       \"86      brown        46.0   female   feminine         Naboo    Human  \"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"filter(starwars, f.species == \\\"Human\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.221069Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.220335Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.231762Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.232200Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Jabba Desilijic Tiure</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>green-tan, brown</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>600.0</td>\\n\",\n       \"      <td>hermaphroditic</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Nal Hutta</td>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     name    height      mass hair_color        skin_color  \\\\\\n\",\n       \"                 <object> <float64> <float64>   <object>          <object>   \\n\",\n       \"15  Jabba Desilijic Tiure     175.0    1358.0        NaN  green-tan, brown   \\n\",\n       \"\\n\",\n       \"   eye_color  birth_year             sex     gender  homeworld  species  \\n\",\n       \"    <object>   <float64>        <object>   <object>   <object> <object>  \\n\",\n       \"15    orange       600.0  hermaphroditic  masculine  Nal Hutta     Hutt  \"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"filter(starwars, f.mass > 1000)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.260375Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.259506Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.273843Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.273081Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Nien Nunb</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>68.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Sullust</td>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>Gasgano</td>\\n\",\n       \"      <td>122.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Troiken</td>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>Kit Fisto</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Glee Anselm</td>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>Plo Koon</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>22.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Dorin</td>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>Lama Su</td>\\n\",\n       \"      <td>229.0</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>69</th>\\n\",\n       \"      <td>Taun We</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>Shaak Ti</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>red, blue, white</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Shili</td>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>Tion Medon</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          name    height      mass hair_color        skin_color eye_color  \\\\\\n\",\n       \"      <object> <float64> <float64>   <object>          <object>  <object>   \\n\",\n       \"29   Nien Nunb     160.0      68.0       none              grey     black   \\n\",\n       \"45     Gasgano     122.0       NaN       none       white, blue     black   \\n\",\n       \"49   Kit Fisto     196.0      87.0       none             green     black   \\n\",\n       \"54    Plo Koon     188.0      80.0       none            orange     black   \\n\",\n       \"68     Lama Su     229.0      88.0       none              grey     black   \\n\",\n       \"69     Taun We     213.0       NaN       none              grey     black   \\n\",\n       \"75    Shaak Ti     178.0      57.0       none  red, blue, white     black   \\n\",\n       \"80  Tion Medon     206.0      80.0       none              grey     black   \\n\",\n       \"84         BB8       NaN       NaN       none              none     black   \\n\",\n       \"\\n\",\n       \"    birth_year      sex     gender    homeworld    species  \\n\",\n       \"     <float64> <object>   <object>     <object>   <object>  \\n\",\n       \"29         NaN     male  masculine      Sullust  Sullustan  \\n\",\n       \"45         NaN     male  masculine      Troiken      Xexto  \\n\",\n       \"49         NaN     male  masculine  Glee Anselm   Nautolan  \\n\",\n       \"54        22.0     male  masculine        Dorin    Kel Dor  \\n\",\n       \"68         NaN     male  masculine       Kamino   Kaminoan  \\n\",\n       \"69         NaN   female   feminine       Kamino   Kaminoan  \\n\",\n       \"75         NaN   female   feminine        Shili    Togruta  \\n\",\n       \"80         NaN     male  masculine       Utapau     Pau'an  \\n\",\n       \"84         NaN     none  masculine          NaN      Droid  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Conditions connected by & or | have to wrapped, since == has lower priority than & does\\n\",\n    \"filter(starwars, (f.hair_color == \\\"none\\\") & (f.eye_color == \\\"black\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.313774Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.312830Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.325457Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.325892Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Greedo</td>\\n\",\n       \"      <td>173.0</td>\\n\",\n       \"      <td>74.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>44.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Rodia</td>\\n\",\n       \"      <td>Rodian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>IG-88</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>140.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>metal</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Bossk</td>\\n\",\n       \"      <td>190.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Trandosha</td>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>Lobot</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>37.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bespin</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>Ackbar</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown mottle</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>41.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Mon Cala</td>\\n\",\n       \"      <td>Mon Calamari</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Nien Nunb</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>68.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Sullust</td>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>Nute Gunray</td>\\n\",\n       \"      <td>191.0</td>\\n\",\n       \"      <td>90.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>mottled green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Cato Neimoidia</td>\\n\",\n       \"      <td>Neimodian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>Jar Jar Binks</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>66.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>52.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>Roos Tarpals</td>\\n\",\n       \"      <td>224.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>Rugor Nass</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>Sebulba</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>40.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, red</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Malastare</td>\\n\",\n       \"      <td>Dug</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>Darth Maul</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>54.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Dathomir</td>\\n\",\n       \"      <td>Zabrak</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>Bib Fortuna</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>pink</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Ryloth</td>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>Ayla Secura</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>55.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Ryloth</td>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>Dud Bolt</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>blue, grey</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Vulpter</td>\\n\",\n       \"      <td>Vulptereen</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>Gasgano</td>\\n\",\n       \"      <td>122.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Troiken</td>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>Ben Quadinaros</td>\\n\",\n       \"      <td>163.0</td>\\n\",\n       \"      <td>65.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, green, yellow</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tund</td>\\n\",\n       \"      <td>Toong</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>Mace Windu</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Haruun Kal</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>Kit Fisto</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Glee Anselm</td>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>Adi Gallia</td>\\n\",\n       \"      <td>184.0</td>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Coruscant</td>\\n\",\n       \"      <td>Tholothian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>Saesee Tiin</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Iktotch</td>\\n\",\n       \"      <td>Iktotchi</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>Yarael Poof</td>\\n\",\n       \"      <td>264.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Quermia</td>\\n\",\n       \"      <td>Quermian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>Plo Koon</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>22.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Dorin</td>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>55</th>\\n\",\n       \"      <td>Mas Amedda</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Champala</td>\\n\",\n       \"      <td>Chagrian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>59</th>\\n\",\n       \"      <td>Poggle the Lesser</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Geonosis</td>\\n\",\n       \"      <td>Geonosian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>67</th>\\n\",\n       \"      <td>Dexter Jettster</td>\\n\",\n       \"      <td>198.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Ojom</td>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>Lama Su</td>\\n\",\n       \"      <td>229.0</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>69</th>\\n\",\n       \"      <td>Taun We</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>71</th>\\n\",\n       \"      <td>Ratts Tyerell</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey, blue</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Aleen Minor</td>\\n\",\n       \"      <td>Aleena</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>72</th>\\n\",\n       \"      <td>R4-P17</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>silver, red</td>\\n\",\n       \"      <td>red, blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>73</th>\\n\",\n       \"      <td>Wat Tambor</td>\\n\",\n       \"      <td>193.0</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green, grey</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Skako</td>\\n\",\n       \"      <td>Skakoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>74</th>\\n\",\n       \"      <td>San Hill</td>\\n\",\n       \"      <td>191.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Muunilinst</td>\\n\",\n       \"      <td>Muun</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>Shaak Ti</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>red, blue, white</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Shili</td>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>76</th>\\n\",\n       \"      <td>Grievous</td>\\n\",\n       \"      <td>216.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown, white</td>\\n\",\n       \"      <td>green, yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kalee</td>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>79</th>\\n\",\n       \"      <td>Sly Moore</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Umbara</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>Tion Medon</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 name    height      mass hair_color           skin_color  \\\\\\n\",\n       \"             <object> <float64> <float64>   <object>             <object>   \\n\",\n       \"3         Darth Vader     202.0     136.0       none                white   \\n\",\n       \"14             Greedo     173.0      74.0        NaN                green   \\n\",\n       \"21              IG-88     200.0     140.0       none                metal   \\n\",\n       \"22              Bossk     190.0     113.0       none                green   \\n\",\n       \"24              Lobot     175.0      79.0       none                light   \\n\",\n       \"25             Ackbar     180.0      83.0       none         brown mottle   \\n\",\n       \"29          Nien Nunb     160.0      68.0       none                 grey   \\n\",\n       \"31        Nute Gunray     191.0      90.0       none        mottled green   \\n\",\n       \"33      Jar Jar Binks     196.0      66.0       none               orange   \\n\",\n       \"34       Roos Tarpals     224.0      82.0       none                 grey   \\n\",\n       \"35         Rugor Nass     206.0       NaN       none                green   \\n\",\n       \"38            Sebulba     112.0      40.0       none            grey, red   \\n\",\n       \"41         Darth Maul     175.0      80.0       none                  red   \\n\",\n       \"42        Bib Fortuna     180.0       NaN       none                 pale   \\n\",\n       \"43        Ayla Secura     178.0      55.0       none                 blue   \\n\",\n       \"44           Dud Bolt      94.0      45.0       none           blue, grey   \\n\",\n       \"45            Gasgano     122.0       NaN       none          white, blue   \\n\",\n       \"46     Ben Quadinaros     163.0      65.0       none  grey, green, yellow   \\n\",\n       \"47         Mace Windu     188.0      84.0       none                 dark   \\n\",\n       \"49          Kit Fisto     196.0      87.0       none                green   \\n\",\n       \"51         Adi Gallia     184.0      50.0       none                 dark   \\n\",\n       \"52        Saesee Tiin     188.0       NaN       none                 pale   \\n\",\n       \"53        Yarael Poof     264.0       NaN       none                white   \\n\",\n       \"54           Plo Koon     188.0      80.0       none               orange   \\n\",\n       \"55         Mas Amedda     196.0       NaN       none                 blue   \\n\",\n       \"59  Poggle the Lesser     183.0      80.0       none                green   \\n\",\n       \"67    Dexter Jettster     198.0     102.0       none                brown   \\n\",\n       \"68            Lama Su     229.0      88.0       none                 grey   \\n\",\n       \"69            Taun We     213.0       NaN       none                 grey   \\n\",\n       \"71      Ratts Tyerell      79.0      15.0       none           grey, blue   \\n\",\n       \"72             R4-P17      96.0       NaN       none          silver, red   \\n\",\n       \"73         Wat Tambor     193.0      48.0       none          green, grey   \\n\",\n       \"74           San Hill     191.0       NaN       none                 grey   \\n\",\n       \"75           Shaak Ti     178.0      57.0       none     red, blue, white   \\n\",\n       \"76           Grievous     216.0     159.0       none         brown, white   \\n\",\n       \"79          Sly Moore     178.0      48.0       none                 pale   \\n\",\n       \"80         Tion Medon     206.0      80.0       none                 grey   \\n\",\n       \"84                BB8       NaN       NaN       none                 none   \\n\",\n       \"\\n\",\n       \"        eye_color  birth_year      sex     gender       homeworld  \\\\\\n\",\n       \"         <object>   <float64> <object>   <object>        <object>   \\n\",\n       \"3          yellow        41.9     male  masculine        Tatooine   \\n\",\n       \"14          black        44.0     male  masculine           Rodia   \\n\",\n       \"21            red        15.0     none  masculine             NaN   \\n\",\n       \"22            red        53.0     male  masculine       Trandosha   \\n\",\n       \"24           blue        37.0     male  masculine          Bespin   \\n\",\n       \"25         orange        41.0     male  masculine        Mon Cala   \\n\",\n       \"29          black         NaN     male  masculine         Sullust   \\n\",\n       \"31            red         NaN     male  masculine  Cato Neimoidia   \\n\",\n       \"33         orange        52.0     male  masculine           Naboo   \\n\",\n       \"34         orange         NaN     male  masculine           Naboo   \\n\",\n       \"35         orange         NaN     male  masculine           Naboo   \\n\",\n       \"38         orange         NaN     male  masculine       Malastare   \\n\",\n       \"41         yellow        54.0     male  masculine        Dathomir   \\n\",\n       \"42           pink         NaN     male  masculine          Ryloth   \\n\",\n       \"43          hazel        48.0   female   feminine          Ryloth   \\n\",\n       \"44         yellow         NaN     male  masculine         Vulpter   \\n\",\n       \"45          black         NaN     male  masculine         Troiken   \\n\",\n       \"46         orange         NaN     male  masculine            Tund   \\n\",\n       \"47          brown        72.0     male  masculine      Haruun Kal   \\n\",\n       \"49          black         NaN     male  masculine     Glee Anselm   \\n\",\n       \"51           blue         NaN   female   feminine       Coruscant   \\n\",\n       \"52         orange         NaN     male  masculine         Iktotch   \\n\",\n       \"53         yellow         NaN     male  masculine         Quermia   \\n\",\n       \"54          black        22.0     male  masculine           Dorin   \\n\",\n       \"55           blue         NaN     male  masculine        Champala   \\n\",\n       \"59         yellow         NaN     male  masculine        Geonosis   \\n\",\n       \"67         yellow         NaN     male  masculine            Ojom   \\n\",\n       \"68          black         NaN     male  masculine          Kamino   \\n\",\n       \"69          black         NaN   female   feminine          Kamino   \\n\",\n       \"71        unknown         NaN     male  masculine     Aleen Minor   \\n\",\n       \"72      red, blue         NaN     none   feminine             NaN   \\n\",\n       \"73        unknown         NaN     male  masculine           Skako   \\n\",\n       \"74           gold         NaN     male  masculine      Muunilinst   \\n\",\n       \"75          black         NaN   female   feminine           Shili   \\n\",\n       \"76  green, yellow         NaN     male  masculine           Kalee   \\n\",\n       \"79          white         NaN      NaN        NaN          Umbara   \\n\",\n       \"80          black         NaN     male  masculine          Utapau   \\n\",\n       \"84          black         NaN     none  masculine             NaN   \\n\",\n       \"\\n\",\n       \"         species  \\n\",\n       \"        <object>  \\n\",\n       \"3          Human  \\n\",\n       \"14        Rodian  \\n\",\n       \"21         Droid  \\n\",\n       \"22    Trandoshan  \\n\",\n       \"24         Human  \\n\",\n       \"25  Mon Calamari  \\n\",\n       \"29     Sullustan  \\n\",\n       \"31     Neimodian  \\n\",\n       \"33        Gungan  \\n\",\n       \"34        Gungan  \\n\",\n       \"35        Gungan  \\n\",\n       \"38           Dug  \\n\",\n       \"41        Zabrak  \\n\",\n       \"42       Twi'lek  \\n\",\n       \"43       Twi'lek  \\n\",\n       \"44    Vulptereen  \\n\",\n       \"45         Xexto  \\n\",\n       \"46         Toong  \\n\",\n       \"47         Human  \\n\",\n       \"49      Nautolan  \\n\",\n       \"51    Tholothian  \\n\",\n       \"52      Iktotchi  \\n\",\n       \"53      Quermian  \\n\",\n       \"54       Kel Dor  \\n\",\n       \"55      Chagrian  \\n\",\n       \"59     Geonosian  \\n\",\n       \"67      Besalisk  \\n\",\n       \"68      Kaminoan  \\n\",\n       \"69      Kaminoan  \\n\",\n       \"71        Aleena  \\n\",\n       \"72         Droid  \\n\",\n       \"73       Skakoan  \\n\",\n       \"74          Muun  \\n\",\n       \"75       Togruta  \\n\",\n       \"76       Kaleesh  \\n\",\n       \"79           NaN  \\n\",\n       \"80        Pau'an  \\n\",\n       \"84         Droid  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"filter(starwars, (f.hair_color == \\\"none\\\") | (f.eye_color == \\\"black\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.363097Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.361695Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.394981Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.395470Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>Nien Nunb</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>68.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Sullust</td>\\n\",\n       \"      <td>Sullustan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>Gasgano</td>\\n\",\n       \"      <td>122.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Troiken</td>\\n\",\n       \"      <td>Xexto</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>Kit Fisto</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Glee Anselm</td>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>54</th>\\n\",\n       \"      <td>Plo Koon</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>22.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Dorin</td>\\n\",\n       \"      <td>Kel Dor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>Lama Su</td>\\n\",\n       \"      <td>229.0</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>69</th>\\n\",\n       \"      <td>Taun We</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>Shaak Ti</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>red, blue, white</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Shili</td>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>Tion Medon</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>Pau'an</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          name    height      mass hair_color        skin_color eye_color  \\\\\\n\",\n       \"      <object> <float64> <float64>   <object>          <object>  <object>   \\n\",\n       \"29   Nien Nunb     160.0      68.0       none              grey     black   \\n\",\n       \"45     Gasgano     122.0       NaN       none       white, blue     black   \\n\",\n       \"49   Kit Fisto     196.0      87.0       none             green     black   \\n\",\n       \"54    Plo Koon     188.0      80.0       none            orange     black   \\n\",\n       \"68     Lama Su     229.0      88.0       none              grey     black   \\n\",\n       \"69     Taun We     213.0       NaN       none              grey     black   \\n\",\n       \"75    Shaak Ti     178.0      57.0       none  red, blue, white     black   \\n\",\n       \"80  Tion Medon     206.0      80.0       none              grey     black   \\n\",\n       \"84         BB8       NaN       NaN       none              none     black   \\n\",\n       \"\\n\",\n       \"    birth_year      sex     gender    homeworld    species  \\n\",\n       \"     <float64> <object>   <object>     <object>   <object>  \\n\",\n       \"29         NaN     male  masculine      Sullust  Sullustan  \\n\",\n       \"45         NaN     male  masculine      Troiken      Xexto  \\n\",\n       \"49         NaN     male  masculine  Glee Anselm   Nautolan  \\n\",\n       \"54        22.0     male  masculine        Dorin    Kel Dor  \\n\",\n       \"68         NaN     male  masculine       Kamino   Kaminoan  \\n\",\n       \"69         NaN   female   feminine       Kamino   Kaminoan  \\n\",\n       \"75         NaN   female   feminine        Shili    Togruta  \\n\",\n       \"80         NaN     male  masculine       Utapau     Pau'an  \\n\",\n       \"84         NaN     none  masculine          NaN      Droid  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"filter(starwars, f.hair_color == \\\"none\\\", f.eye_color == \\\"black\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.432901Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.432240Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.444105Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.443126Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Owen Lars</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>120.0</td>\\n\",\n       \"      <td>brown, grey</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>52.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Chewbacca</td>\\n\",\n       \"      <td>228.0</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Jabba Desilijic Tiure</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>green-tan, brown</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>600.0</td>\\n\",\n       \"      <td>hermaphroditic</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Nal Hutta</td>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Jek Tono Porkins</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bestine IV</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>IG-88</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>140.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>metal</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Bossk</td>\\n\",\n       \"      <td>190.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Trandosha</td>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>67</th>\\n\",\n       \"      <td>Dexter Jettster</td>\\n\",\n       \"      <td>198.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Ojom</td>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>76</th>\\n\",\n       \"      <td>Grievous</td>\\n\",\n       \"      <td>216.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown, white</td>\\n\",\n       \"      <td>green, yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kalee</td>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>77</th>\\n\",\n       \"      <td>Tarfful</td>\\n\",\n       \"      <td>234.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     name    height      mass   hair_color        skin_color  \\\\\\n\",\n       \"                 <object> <float64> <float64>     <object>          <object>   \\n\",\n       \"3             Darth Vader     202.0     136.0         none             white   \\n\",\n       \"5               Owen Lars     178.0     120.0  brown, grey             light   \\n\",\n       \"12              Chewbacca     228.0     112.0        brown           unknown   \\n\",\n       \"15  Jabba Desilijic Tiure     175.0    1358.0          NaN  green-tan, brown   \\n\",\n       \"17       Jek Tono Porkins     180.0     110.0        brown              fair   \\n\",\n       \"21                  IG-88     200.0     140.0         none             metal   \\n\",\n       \"22                  Bossk     190.0     113.0         none             green   \\n\",\n       \"67        Dexter Jettster     198.0     102.0         none             brown   \\n\",\n       \"76               Grievous     216.0     159.0         none      brown, white   \\n\",\n       \"77                Tarfful     234.0     136.0        brown             brown   \\n\",\n       \"\\n\",\n       \"        eye_color  birth_year             sex     gender   homeworld  \\\\\\n\",\n       \"         <object>   <float64>        <object>   <object>    <object>   \\n\",\n       \"3          yellow        41.9            male  masculine    Tatooine   \\n\",\n       \"5            blue        52.0            male  masculine    Tatooine   \\n\",\n       \"12           blue       200.0            male  masculine    Kashyyyk   \\n\",\n       \"15         orange       600.0  hermaphroditic  masculine   Nal Hutta   \\n\",\n       \"17           blue         NaN            male  masculine  Bestine IV   \\n\",\n       \"21            red        15.0            none  masculine         NaN   \\n\",\n       \"22            red        53.0            male  masculine   Trandosha   \\n\",\n       \"67         yellow         NaN            male  masculine        Ojom   \\n\",\n       \"76  green, yellow         NaN            male  masculine       Kalee   \\n\",\n       \"77           blue         NaN            male  masculine    Kashyyyk   \\n\",\n       \"\\n\",\n       \"       species  \\n\",\n       \"      <object>  \\n\",\n       \"3        Human  \\n\",\n       \"5        Human  \\n\",\n       \"12     Wookiee  \\n\",\n       \"15        Hutt  \\n\",\n       \"17       Human  \\n\",\n       \"21       Droid  \\n\",\n       \"22  Trandoshan  \\n\",\n       \"67    Besalisk  \\n\",\n       \"76     Kaleesh  \\n\",\n       \"77     Wookiee  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> filter(f.mass > mean(f.mass))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.551519Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.550906Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.612485Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.613028Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Owen Lars</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>120.0</td>\\n\",\n       \"      <td>brown, grey</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>52.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Beru Whitesun lars</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>47.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Chewbacca</td>\\n\",\n       \"      <td>228.0</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Jabba Desilijic Tiure</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>green-tan, brown</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>600.0</td>\\n\",\n       \"      <td>hermaphroditic</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Nal Hutta</td>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Jek Tono Porkins</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bestine IV</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>IG-88</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>140.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>metal</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Bossk</td>\\n\",\n       \"      <td>190.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Trandosha</td>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Ayla Secura</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>55.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Ryloth</td>\\n\",\n       \"      <td>Twi'lek</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Luminara Unduli</td>\\n\",\n       \"      <td>170.0</td>\\n\",\n       \"      <td>56.2</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>58.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Mirial</td>\\n\",\n       \"      <td>Mirialan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Zam Wesell</td>\\n\",\n       \"      <td>168.0</td>\\n\",\n       \"      <td>55.0</td>\\n\",\n       \"      <td>blonde</td>\\n\",\n       \"      <td>fair, green, yellow</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Zolan</td>\\n\",\n       \"      <td>Clawdite</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Shaak Ti</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>red, blue, white</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Shili</td>\\n\",\n       \"      <td>Togruta</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Grievous</td>\\n\",\n       \"      <td>216.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown, white</td>\\n\",\n       \"      <td>green, yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kalee</td>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Tarfful</td>\\n\",\n       \"      <td>234.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: gender (n=2)\"\n      ],\n      \"text/plain\": [\n       \"                     name    height      mass   hair_color  \\\\\\n\",\n       \"                 <object> <float64> <float64>     <object>   \\n\",\n       \"0             Darth Vader     202.0     136.0         none   \\n\",\n       \"1               Owen Lars     178.0     120.0  brown, grey   \\n\",\n       \"2      Beru Whitesun lars     165.0      75.0        brown   \\n\",\n       \"3               Chewbacca     228.0     112.0        brown   \\n\",\n       \"4   Jabba Desilijic Tiure     175.0    1358.0          NaN   \\n\",\n       \"5        Jek Tono Porkins     180.0     110.0        brown   \\n\",\n       \"6                   IG-88     200.0     140.0         none   \\n\",\n       \"7                   Bossk     190.0     113.0         none   \\n\",\n       \"8             Ayla Secura     178.0      55.0         none   \\n\",\n       \"9         Luminara Unduli     170.0      56.2        black   \\n\",\n       \"10             Zam Wesell     168.0      55.0       blonde   \\n\",\n       \"11               Shaak Ti     178.0      57.0         none   \\n\",\n       \"12               Grievous     216.0     159.0         none   \\n\",\n       \"13                Tarfful     234.0     136.0        brown   \\n\",\n       \"\\n\",\n       \"             skin_color      eye_color  birth_year             sex     gender  \\\\\\n\",\n       \"               <object>       <object>   <float64>        <object>   <object>   \\n\",\n       \"0                 white         yellow        41.9            male  masculine   \\n\",\n       \"1                 light           blue        52.0            male  masculine   \\n\",\n       \"2                 light           blue        47.0          female   feminine   \\n\",\n       \"3               unknown           blue       200.0            male  masculine   \\n\",\n       \"4      green-tan, brown         orange       600.0  hermaphroditic  masculine   \\n\",\n       \"5                  fair           blue         NaN            male  masculine   \\n\",\n       \"6                 metal            red        15.0            none  masculine   \\n\",\n       \"7                 green            red        53.0            male  masculine   \\n\",\n       \"8                  blue          hazel        48.0          female   feminine   \\n\",\n       \"9                yellow           blue        58.0          female   feminine   \\n\",\n       \"10  fair, green, yellow         yellow         NaN          female   feminine   \\n\",\n       \"11     red, blue, white          black         NaN          female   feminine   \\n\",\n       \"12         brown, white  green, yellow         NaN            male  masculine   \\n\",\n       \"13                brown           blue         NaN            male  masculine   \\n\",\n       \"\\n\",\n       \"     homeworld     species  \\n\",\n       \"      <object>    <object>  \\n\",\n       \"0     Tatooine       Human  \\n\",\n       \"1     Tatooine       Human  \\n\",\n       \"2     Tatooine       Human  \\n\",\n       \"3     Kashyyyk     Wookiee  \\n\",\n       \"4    Nal Hutta        Hutt  \\n\",\n       \"5   Bestine IV       Human  \\n\",\n       \"6          NaN       Droid  \\n\",\n       \"7    Trandosha  Trandoshan  \\n\",\n       \"8       Ryloth     Twi'lek  \\n\",\n       \"9       Mirial    Mirialan  \\n\",\n       \"10       Zolan    Clawdite  \\n\",\n       \"11       Shili     Togruta  \\n\",\n       \"12       Kalee     Kaleesh  \\n\",\n       \"13    Kashyyyk     Wookiee  \\n\",\n       \"[TibbleGrouped: gender (n=2)]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> group_by(f.gender) >> filter(f.mass > mean(f.mass))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.638518Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.622898Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.644143Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.643500Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Owen Lars</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>120.0</td>\\n\",\n       \"      <td>brown, grey</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>52.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Biggs Darklighter</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>24.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Anakin Skywalker</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Chewbacca</td>\\n\",\n       \"      <td>228.0</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Jabba Desilijic Tiure</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>green-tan, brown</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>600.0</td>\\n\",\n       \"      <td>hermaphroditic</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Nal Hutta</td>\\n\",\n       \"      <td>Hutt</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Jek Tono Porkins</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Bestine IV</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>IG-88</td>\\n\",\n       \"      <td>200.0</td>\\n\",\n       \"      <td>140.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>metal</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>Bossk</td>\\n\",\n       \"      <td>190.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>53.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Trandosha</td>\\n\",\n       \"      <td>Trandoshan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>Ackbar</td>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown mottle</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>41.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Mon Cala</td>\\n\",\n       \"      <td>Mon Calamari</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>Qui-Gon Jinn</td>\\n\",\n       \"      <td>193.0</td>\\n\",\n       \"      <td>89.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>92.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>Nute Gunray</td>\\n\",\n       \"      <td>191.0</td>\\n\",\n       \"      <td>90.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>mottled green</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Cato Neimoidia</td>\\n\",\n       \"      <td>Neimodian</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>Roos Tarpals</td>\\n\",\n       \"      <td>224.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>orange</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Gungan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>Mace Windu</td>\\n\",\n       \"      <td>188.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Haruun Kal</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>Ki-Adi-Mundi</td>\\n\",\n       \"      <td>198.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>pale</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>92.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Cerea</td>\\n\",\n       \"      <td>Cerean</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>Kit Fisto</td>\\n\",\n       \"      <td>196.0</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>green</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Glee Anselm</td>\\n\",\n       \"      <td>Nautolan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>56</th>\\n\",\n       \"      <td>Gregar Typho</td>\\n\",\n       \"      <td>185.0</td>\\n\",\n       \"      <td>85.0</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>dark</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>67</th>\\n\",\n       \"      <td>Dexter Jettster</td>\\n\",\n       \"      <td>198.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Ojom</td>\\n\",\n       \"      <td>Besalisk</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>68</th>\\n\",\n       \"      <td>Lama Su</td>\\n\",\n       \"      <td>229.0</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>grey</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kamino</td>\\n\",\n       \"      <td>Kaminoan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>76</th>\\n\",\n       \"      <td>Grievous</td>\\n\",\n       \"      <td>216.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>brown, white</td>\\n\",\n       \"      <td>green, yellow</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kalee</td>\\n\",\n       \"      <td>Kaleesh</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>77</th>\\n\",\n       \"      <td>Tarfful</td>\\n\",\n       \"      <td>234.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Kashyyyk</td>\\n\",\n       \"      <td>Wookiee</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     name    height      mass   hair_color        skin_color  \\\\\\n\",\n       \"                 <object> <float64> <float64>     <object>          <object>   \\n\",\n       \"3             Darth Vader     202.0     136.0         none             white   \\n\",\n       \"5               Owen Lars     178.0     120.0  brown, grey             light   \\n\",\n       \"8       Biggs Darklighter     183.0      84.0        black             light   \\n\",\n       \"10       Anakin Skywalker     188.0      84.0        blond              fair   \\n\",\n       \"12              Chewbacca     228.0     112.0        brown           unknown   \\n\",\n       \"15  Jabba Desilijic Tiure     175.0    1358.0          NaN  green-tan, brown   \\n\",\n       \"17       Jek Tono Porkins     180.0     110.0        brown              fair   \\n\",\n       \"21                  IG-88     200.0     140.0         none             metal   \\n\",\n       \"22                  Bossk     190.0     113.0         none             green   \\n\",\n       \"25                 Ackbar     180.0      83.0         none      brown mottle   \\n\",\n       \"30           Qui-Gon Jinn     193.0      89.0        brown              fair   \\n\",\n       \"31            Nute Gunray     191.0      90.0         none     mottled green   \\n\",\n       \"34           Roos Tarpals     224.0      82.0         none              grey   \\n\",\n       \"47             Mace Windu     188.0      84.0         none              dark   \\n\",\n       \"48           Ki-Adi-Mundi     198.0      82.0        white              pale   \\n\",\n       \"49              Kit Fisto     196.0      87.0         none             green   \\n\",\n       \"56           Gregar Typho     185.0      85.0        black              dark   \\n\",\n       \"67        Dexter Jettster     198.0     102.0         none             brown   \\n\",\n       \"68                Lama Su     229.0      88.0         none              grey   \\n\",\n       \"76               Grievous     216.0     159.0         none      brown, white   \\n\",\n       \"77                Tarfful     234.0     136.0        brown             brown   \\n\",\n       \"\\n\",\n       \"        eye_color  birth_year             sex     gender       homeworld  \\\\\\n\",\n       \"         <object>   <float64>        <object>   <object>        <object>   \\n\",\n       \"3          yellow        41.9            male  masculine        Tatooine   \\n\",\n       \"5            blue        52.0            male  masculine        Tatooine   \\n\",\n       \"8           brown        24.0            male  masculine        Tatooine   \\n\",\n       \"10           blue        41.9            male  masculine        Tatooine   \\n\",\n       \"12           blue       200.0            male  masculine        Kashyyyk   \\n\",\n       \"15         orange       600.0  hermaphroditic  masculine       Nal Hutta   \\n\",\n       \"17           blue         NaN            male  masculine      Bestine IV   \\n\",\n       \"21            red        15.0            none  masculine             NaN   \\n\",\n       \"22            red        53.0            male  masculine       Trandosha   \\n\",\n       \"25         orange        41.0            male  masculine        Mon Cala   \\n\",\n       \"30           blue        92.0            male  masculine             NaN   \\n\",\n       \"31            red         NaN            male  masculine  Cato Neimoidia   \\n\",\n       \"34         orange         NaN            male  masculine           Naboo   \\n\",\n       \"47          brown        72.0            male  masculine      Haruun Kal   \\n\",\n       \"48         yellow        92.0            male  masculine           Cerea   \\n\",\n       \"49          black         NaN            male  masculine     Glee Anselm   \\n\",\n       \"56          brown         NaN            male  masculine           Naboo   \\n\",\n       \"67         yellow         NaN            male  masculine            Ojom   \\n\",\n       \"68          black         NaN            male  masculine          Kamino   \\n\",\n       \"76  green, yellow         NaN            male  masculine           Kalee   \\n\",\n       \"77           blue         NaN            male  masculine        Kashyyyk   \\n\",\n       \"\\n\",\n       \"         species  \\n\",\n       \"        <object>  \\n\",\n       \"3          Human  \\n\",\n       \"5          Human  \\n\",\n       \"8          Human  \\n\",\n       \"10         Human  \\n\",\n       \"12       Wookiee  \\n\",\n       \"15          Hutt  \\n\",\n       \"17         Human  \\n\",\n       \"21         Droid  \\n\",\n       \"22    Trandoshan  \\n\",\n       \"25  Mon Calamari  \\n\",\n       \"30         Human  \\n\",\n       \"31     Neimodian  \\n\",\n       \"34        Gungan  \\n\",\n       \"47         Human  \\n\",\n       \"48        Cerean  \\n\",\n       \"49      Nautolan  \\n\",\n       \"56         Human  \\n\",\n       \"67      Besalisk  \\n\",\n       \"68      Kaminoan  \\n\",\n       \"76       Kaleesh  \\n\",\n       \"77       Wookiee  \"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# To refer to column names that are stored as strings, use `f[...]`:\\n\",\n    \"vars = c(\\\"mass\\\", \\\"height\\\")\\n\",\n    \"cond = c(80, 150)\\n\",\n    \"starwars >> \\\\\\n\",\n    \"  filter(\\n\",\n    \"    f[vars[0]] > cond[0],\\n\",\n    \"    f[vars[1]] > cond[1]\\n\",\n    \"  )\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"datar-TA_GutPO-py3.12\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/forcats_fct_multi.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fforcat_fct_multi.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_c</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Concatenate factors, combining levels\\n\",\n       \"\\n\",\n       \"This is a useful ways of patching together factors from multiple sources  \\n\",\n       \"that really should have the same levels but don't.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*fs`: factors to concatenate  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The concatenated factor  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_cross</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Combine levels from two or more factors to create a new factor\\n\",\n       \"\\n\",\n       \"Computes a factor whose levels are all the combinations of  \\n\",\n       \"the levels of the input factors.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*fs`: factors to cross  \\n\",\n       \"&emsp;&emsp;`sep`: A string to separate levels  \\n\",\n       \"&emsp;&emsp;`keep_empty`: If True, keep combinations with no observations as levels  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The new factor  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(\\n\",\n    \"    fct_c,\\n\",\n    \"    fct_cross,\\n\",\n    \"    book=\\\"forcat_fct_multi\\\",\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_c\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"fa = factor(\\\"a\\\")\\n\",\n    \"fb = factor(\\\"b\\\")\\n\",\n    \"fab = factor(c(\\\"a\\\", \\\"b\\\"))\\n\",\n    \"\\n\",\n    \"# c(fa, fb, fab)\\n\",\n    \"# convert factor to integer for `c`?\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b', 'a', 'b']\\n\",\n       \"Categories (2, object): ['a', 'b']\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_c(fa, fb, fab)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b', 'a', 'b']\\n\",\n       \"Categories (2, object): ['a', 'b']\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fs = [fa, fb, fab]\\n\",\n    \"fct_c(*fs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_cross\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['apple:green', 'kiwi:green', 'apple:red', 'apple:green']\\n\",\n       \"Categories (3, object): ['apple:green', 'apple:red', 'kiwi:green']\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fruit = factor(c(\\\"apple\\\", \\\"kiwi\\\", \\\"apple\\\", \\\"apple\\\"))\\n\",\n    \"colour = factor(c(\\\"green\\\", \\\"green\\\", \\\"red\\\", \\\"green\\\"))\\n\",\n    \"eaten = c(\\\"yes\\\", \\\"no\\\", \\\"yes\\\", \\\"no\\\")\\n\",\n    \"fct_cross(fruit, colour)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['apple:green:yes', 'kiwi:green:no', 'apple:red:yes', 'apple:green:no']\\n\",\n       \"Categories (4, object): ['apple:green:no', 'apple:green:yes', 'apple:red:yes', 'kiwi:green:no']\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_cross(fruit, colour, eaten)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['apple:green', 'kiwi:green', 'apple:red', 'apple:green']\\n\",\n       \"Categories (4, object): ['apple:green', 'apple:red', 'kiwi:green', 'kiwi:red']\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_cross(fruit, colour, keep_empty = TRUE)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/forcats_lvl_addrm.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fforcat_lvl_addrm.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_expand</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add additional levels to a factor\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`*additional_levels`: Additional levels to add to the factor.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Levels that already exist will be silently ignored.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels expanded  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_explicit_na</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Make missing values explicit\\n\",\n       \"\\n\",\n       \"This gives missing values an explicit factor level, ensuring that they  \\n\",\n       \"appear in summaries and on plots.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`na_level`: Level to use for missing values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This is what NAs will be changed to.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with explict na_levels  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_drop</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Drop unused levels\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`only`: A character vector restricting the set of levels to be dropped.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If supplied, only levels that have no entries and appear in  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;this vector will be removed.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with unused levels dropped  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_unify</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Unify the levels in a list of factors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`fs`: A list of factors  \\n\",\n       \"&emsp;&emsp;`levels`: Set of levels to apply to every factor. Default to union  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;of all factor levels  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A list of factors with the levels expanded  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(\\n\",\n    \"    fct_expand,\\n\",\n    \"    fct_explicit_na,\\n\",\n    \"    fct_drop,\\n\",\n    \"    fct_unify,\\n\",\n    \"    book=\\\"forcat_lvl_addrm\\\",\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_expand\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['c', 'c', 'b', 'c', 'a', ..., 'b', 'c', 'b', 'b', 'c']\\n\",\n       \"Length: 20\\n\",\n       \"Categories (3, object): ['a', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct = factor(sample(letters[:3], 20, replace = TRUE))\\n\",\n    \"fct\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['c', 'c', 'b', 'c', 'a', ..., 'b', 'c', 'b', 'b', 'c']\\n\",\n       \"Length: 20\\n\",\n       \"Categories (6, object): ['a', 'b', 'c', 'd', 'e', 'f']\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_expand(fct, \\\"d\\\", \\\"e\\\", \\\"f\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['c', 'c', 'b', 'c', 'a', ..., 'b', 'c', 'b', 'b', 'c']\\n\",\n       \"Length: 20\\n\",\n       \"Categories (6, object): ['a', 'b', 'c', 'd', 'e', 'f']\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_expand(fct, letters[:6])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_explicit_na\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           f         n\\n\",\n       \"  <category> <float64>\\n\",\n       \"0          a       4.0\\n\",\n       \"1          b       2.0\\n\",\n       \"2          c       2.0\\n\",\n       \"3        NaN       3.0\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"f1 = factor(c(\\\"a\\\", \\\"a\\\", NA, NA, \\\"a\\\", \\\"b\\\", NA, \\\"c\\\", \\\"a\\\", \\\"c\\\", \\\"b\\\"))\\n\",\n    \"fct_count(f1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>(Missing)</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           f       n\\n\",\n       \"  <category> <int64>\\n\",\n       \"0          a       4\\n\",\n       \"1          b       2\\n\",\n       \"2          c       2\\n\",\n       \"3  (Missing)       3\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"f2 = fct_explicit_na(f1)\\n\",\n    \"fct_count(f2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_drop\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b']\\n\",\n       \"Categories (3, object): ['a', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct = factor(c(\\\"a\\\", \\\"b\\\"), levels = c(\\\"a\\\", \\\"b\\\", \\\"c\\\"))\\n\",\n    \"fct\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b']\\n\",\n       \"Categories (2, object): ['a', 'b']\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_drop(fct)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b']\\n\",\n       \"Categories (3, object): ['a', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_drop(fct, only = \\\"a\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b']\\n\",\n       \"Categories (2, object): ['a', 'b']\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_drop(fct, only = \\\"c\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_unify\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[['a']\\n\",\n       \" Categories (2, object): ['a', 'b'],\\n\",\n       \" ['b']\\n\",\n       \" Categories (2, object): ['a', 'b'],\\n\",\n       \" ['a', 'b']\\n\",\n       \" Categories (2, object): ['a', 'b']]\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fs = [factor(\\\"a\\\"), factor(\\\"b\\\"), factor(c(\\\"a\\\", \\\"b\\\"))]\\n\",\n    \"fct_unify(fs)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/forcats_lvl_order.ipynb",
    "content": "{\n    \"cells\": [\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 32,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/html\": [\n                            \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fforcat_lvl_order.ipynb\\\">binder</a>.</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.HTML object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_relevel</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by hand\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor (categoriccal), or a string vector  \\n\",\n                            \"&emsp;&emsp;`*lvls`: Either a function (then `len(lvls)` should equal to `1`) or  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;the new levels.  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;A function will be called with the current levels as input, and the  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;return value (which must be a character vector) will be used to  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;relevel the factor.  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;Any levels not mentioned will be left in their existing order,  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;by default after the explicitly mentioned levels.  \\n\",\n                            \"\\n\",\n                            \"&emsp;&emsp;`after`: Where should the new values be placed?  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels replaced  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_inorder</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by first appearance\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`ordered`: A logical which determines the \\\"ordered\\\" status of the  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;output factor.  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reordered  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_infreq</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by frequency\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`ordered`: A logical which determines the \\\"ordered\\\" status of the  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;output factor.  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reordered  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_inseq</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by sequence\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`ordered`: A logical which determines the \\\"ordered\\\" status of the  \\n\",\n                            \"&emsp;&emsp;&emsp;&emsp;output factor.  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reordered  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_reorder</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by a function (default: median)\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`_x`: The data to be used to reorder the factor  \\n\",\n                            \"&emsp;&emsp;`_fun`: A function to be used to reorder the factor  \\n\",\n                            \"&emsp;&emsp;`_desc`: If `True`, the factor will be reordered in descending order  \\n\",\n                            \"&emsp;&emsp;`*args`: Extra arguments to be passed to `_fun`  \\n\",\n                            \"&emsp;&emsp;`**kwargs`: Extra keyword arguments to be passed to `_fun`  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reordered  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_reorder2</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reorder factor levels by a function (default: `last2`)\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`_x`: The data to be used to reorder the factor  \\n\",\n                            \"&emsp;&emsp;`_fun`: A function to be used to reorder the factor  \\n\",\n                            \"&emsp;&emsp;`_desc`: If `True`, the factor will be reordered in descending order  \\n\",\n                            \"&emsp;&emsp;`*args`: Extra arguments to be passed to `_fun`  \\n\",\n                            \"&emsp;&emsp;`**kwargs`: Extra keyword arguments to be passed to `_fun`  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reordered  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_rev</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Reverse the order of the levels of a factor\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels reversed  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_shift</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Shift the levels of a factor\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"&emsp;&emsp;`n`: The number of levels to shift  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels shifted  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_shuffle</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Shuffle the levels of a factor\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_f`: A factor  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;The factor with levels shuffled  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ first2</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Find the first element of `_y` ordered by `_x`\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_x`: The vector used to order `_y`  \\n\",\n                            \"&emsp;&emsp;`_y`: The vector to get the first element of  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;First element of `_y` ordered by `_x`  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ last2</div>\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/markdown\": [\n                            \"##### Find the last element of `_y` ordered by `_x`\\n\",\n                            \"\\n\",\n                            \"##### Args:\\n\",\n                            \"&emsp;&emsp;`_x`: The vector used to order `_y`  \\n\",\n                            \"&emsp;&emsp;`_y`: The vector to get the last element of  \\n\",\n                            \"\\n\",\n                            \"##### Returns:\\n\",\n                            \"&emsp;&emsp;Last element of `_y` ordered by `_x`  \\n\"\n                        ],\n                        \"text/plain\": [\n                            \"<IPython.core.display.Markdown object>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                }\n            ],\n            \"source\": [\n                \"%run nb_helpers.py\\n\",\n                \"\\n\",\n                \"import plotnine as p9\\n\",\n                \"from datar.all import *\\n\",\n                \"from datar.data import gss_cat, iris, ChickWeight\\n\",\n                \"\\n\",\n                \"nb_header(\\n\",\n                \"    fct_relevel,\\n\",\n                \"    fct_inorder,\\n\",\n                \"    fct_infreq,\\n\",\n                \"    fct_inseq,\\n\",\n                \"    fct_reorder,\\n\",\n                \"    fct_reorder2,\\n\",\n                \"    fct_rev,\\n\",\n                \"    fct_shift,\\n\",\n                \"    fct_shuffle,\\n\",\n                \"    first2,\\n\",\n                \"    last2, \\n\",\n                \"    book=\\\"forcat_lvl_order\\\",\\n\",\n                \")\\n\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_relevel\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 2,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'c', 'd', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 2,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct = factor(c(\\\"a\\\", \\\"b\\\", \\\"c\\\", \\\"d\\\"), levels = c(\\\"b\\\", \\\"c\\\", \\\"d\\\", \\\"a\\\"))\\n\",\n                \"fct_relevel(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 3,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['a', 'b', 'c', 'd']\"\n                        ]\n                    },\n                    \"execution_count\": 3,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, \\\"a\\\")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 4,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'a', 'c', 'd']\"\n                        ]\n                    },\n                    \"execution_count\": 4,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, \\\"b\\\", \\\"a\\\")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 5,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'c', 'a', 'd']\"\n                        ]\n                    },\n                    \"execution_count\": 5,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, \\\"a\\\", after=1)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 6,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['a', 'b', 'c', 'd']\"\n                        ]\n                    },\n                    \"execution_count\": 6,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"# use -1 instead of Inf\\n\",\n                \"fct_relevel(fct, \\\"a\\\", after = None)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 7,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'c', 'd', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 7,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, \\\"a\\\", after = 2)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 8,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['a', 'b', 'c', 'd']\"\n                        ]\n                    },\n                    \"execution_count\": 8,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, sort)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 9,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'd', 'a', 'c']\"\n                        ]\n                    },\n                    \"execution_count\": 9,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, sample)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 10,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['a', 'd', 'c', 'b']\"\n                        ]\n                    },\n                    \"execution_count\": 10,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, rev)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 11,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"{'rincome': ['$1000 to 2999',\\n\",\n                            \"  '$10000 - 14999',\\n\",\n                            \"  '$15000 - 19999',\\n\",\n                            \"  '$20000 - 24999',\\n\",\n                            \"  '$25000 or more',\\n\",\n                            \"  '$3000 to 3999',\\n\",\n                            \"  '$4000 to 4999',\\n\",\n                            \"  '$5000 to 5999',\\n\",\n                            \"  '$6000 to 6999',\\n\",\n                            \"  '$7000 to 7999',\\n\",\n                            \"  '$8000 to 9999',\\n\",\n                            \"  \\\"Don't know\\\",\\n\",\n                            \"  'Lt $1000',\\n\",\n                            \"  'No answer',\\n\",\n                            \"  'Not applicable',\\n\",\n                            \"  'Refused'],\\n\",\n                            \" 'denom': ['Afr meth ep zion',\\n\",\n                            \"  'Afr meth episcopal',\\n\",\n                            \"  'Am bapt ch in usa',\\n\",\n                            \"  'Am baptist asso',\\n\",\n                            \"  'Am lutheran',\\n\",\n                            \"  'Baptist-dk which',\\n\",\n                            \"  \\\"Don't know\\\",\\n\",\n                            \"  'Episcopal',\\n\",\n                            \"  'Evangelical luth',\\n\",\n                            \"  'Luth ch in america',\\n\",\n                            \"  'Lutheran-dk which',\\n\",\n                            \"  'Lutheran-mo synod',\\n\",\n                            \"  'Methodist-dk which',\\n\",\n                            \"  'Nat bapt conv of am',\\n\",\n                            \"  'Nat bapt conv usa',\\n\",\n                            \"  'No answer',\\n\",\n                            \"  'No denomination',\\n\",\n                            \"  'Not applicable',\\n\",\n                            \"  'Other',\\n\",\n                            \"  'Other baptists',\\n\",\n                            \"  'Other lutheran',\\n\",\n                            \"  'Other methodist',\\n\",\n                            \"  'Other presbyterian',\\n\",\n                            \"  'Presbyterian c in us',\\n\",\n                            \"  'Presbyterian, merged',\\n\",\n                            \"  'Presbyterian-dk wh',\\n\",\n                            \"  'Southern baptist',\\n\",\n                            \"  'United methodist',\\n\",\n                            \"  'United pres ch in us',\\n\",\n                            \"  'Wi evan luth synod']}\"\n                        ]\n                    },\n                    \"execution_count\": 11,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"df = gss_cat[[\\\"rincome\\\", \\\"denom\\\"]] >> mutate(across(everything(), as_factor)) \\n\",\n                \"\\n\",\n                \"(\\n\",\n                \"    df \\n\",\n                \"        >> summarize(across(everything(), lambda col: [levels(col).tolist()]))\\n\",\n                \"        >> t()\\n\",\n                \"        >> rename_with(str)\\n\",\n                \"        >> pull(to=\\\"dict\\\", name=rownames(f))\\n\",\n                \") \"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 12,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"{'rincome': ['$1000 to 2999',\\n\",\n                            \"  '$10000 - 14999',\\n\",\n                            \"  '$15000 - 19999',\\n\",\n                            \"  '$20000 - 24999',\\n\",\n                            \"  '$25000 or more',\\n\",\n                            \"  '$3000 to 3999',\\n\",\n                            \"  '$4000 to 4999',\\n\",\n                            \"  '$5000 to 5999',\\n\",\n                            \"  '$6000 to 6999',\\n\",\n                            \"  '$7000 to 7999',\\n\",\n                            \"  '$8000 to 9999',\\n\",\n                            \"  'Lt $1000',\\n\",\n                            \"  'No answer',\\n\",\n                            \"  'Not applicable',\\n\",\n                            \"  'Refused',\\n\",\n                            \"  \\\"Don't know\\\"],\\n\",\n                            \" 'denom': ['Afr meth ep zion',\\n\",\n                            \"  'Afr meth episcopal',\\n\",\n                            \"  'Am bapt ch in usa',\\n\",\n                            \"  'Am baptist asso',\\n\",\n                            \"  'Am lutheran',\\n\",\n                            \"  'Baptist-dk which',\\n\",\n                            \"  'Episcopal',\\n\",\n                            \"  'Evangelical luth',\\n\",\n                            \"  'Luth ch in america',\\n\",\n                            \"  'Lutheran-dk which',\\n\",\n                            \"  'Lutheran-mo synod',\\n\",\n                            \"  'Methodist-dk which',\\n\",\n                            \"  'Nat bapt conv of am',\\n\",\n                            \"  'Nat bapt conv usa',\\n\",\n                            \"  'No answer',\\n\",\n                            \"  'No denomination',\\n\",\n                            \"  'Not applicable',\\n\",\n                            \"  'Other',\\n\",\n                            \"  'Other baptists',\\n\",\n                            \"  'Other lutheran',\\n\",\n                            \"  'Other methodist',\\n\",\n                            \"  'Other presbyterian',\\n\",\n                            \"  'Presbyterian c in us',\\n\",\n                            \"  'Presbyterian, merged',\\n\",\n                            \"  'Presbyterian-dk wh',\\n\",\n                            \"  'Southern baptist',\\n\",\n                            \"  'United methodist',\\n\",\n                            \"  'United pres ch in us',\\n\",\n                            \"  'Wi evan luth synod',\\n\",\n                            \"  \\\"Don't know\\\"]}\"\n                        ]\n                    },\n                    \"execution_count\": 12,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"df2 = df >> mutate(across(everything(), fct_relevel, \\\"Don't know\\\", after=-1))\\n\",\n                \"(\\n\",\n                \"    df2 \\n\",\n                \"        >> summarize(across(everything(), lambda col: [levels(col).tolist()]))\\n\",\n                \"        >> t()\\n\",\n                \"        >> rename_with(str)\\n\",\n                \"        >> pull(to=\\\"dict\\\", name=rownames(f))\\n\",\n                \") \"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 13,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"name\": \"stderr\",\n                    \"output_type\": \"stream\",\n                    \"text\": [\n                        \"[2022-12-02 14:00:07][datar][WARNING] [fct_relevel] Unknown levels in `_f`: ['e']\\n\"\n                    ]\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c', 'd']\\n\",\n                            \"Categories (4, object): ['b', 'c', 'd', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 13,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_relevel(fct, \\\"e\\\")\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_inorder, fct_infreq, and fct_inseq\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 14,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['b', 'b', 'a', 'c', 'c', 'c']\\n\",\n                            \"Categories (3, object): ['a', 'b', 'c']\"\n                        ]\n                    },\n                    \"execution_count\": 14,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct = factor(c(\\\"b\\\", \\\"b\\\", \\\"a\\\", \\\"c\\\", \\\"c\\\", \\\"c\\\"))\\n\",\n                \"fct\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 15,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['b', 'b', 'a', 'c', 'c', 'c']\\n\",\n                            \"Categories (3, object): ['b', 'a', 'c']\"\n                        ]\n                    },\n                    \"execution_count\": 15,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_inorder(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 16,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['b', 'b', 'a', 'c', 'c', 'c']\\n\",\n                            \"Categories (3, object): ['c', 'b', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 16,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_infreq(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 17,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"[1, 2, 3]\\n\",\n                            \"Categories (3, int64): [1, 2, 3]\"\n                        ]\n                    },\n                    \"execution_count\": 17,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct = factor([1,2,3], levels = [3,2,1])\\n\",\n                \"fct_inseq(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_reorder, fct_reorder2, last2, and first2\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 18,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['blue', 'green', 'purple', 'red', 'yellow']\\n\",\n                            \"Categories (5, object): ['blue', 'red', 'purple', 'yellow', 'green']\"\n                        ]\n                    },\n                    \"execution_count\": 18,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"df = tribble(\\n\",\n                \"    f.color,  f.a, f.b,\\n\",\n                \"    \\\"blue\\\",   1,   2,\\n\",\n                \"    \\\"green\\\",  6,   2,\\n\",\n                \"    \\\"purple\\\", 3,   3,\\n\",\n                \"    \\\"red\\\",    2,   3,\\n\",\n                \"    \\\"yellow\\\", 5,   1\\n\",\n                \") >> mutate(color=as_factor(f.color))\\n\",\n                \"\\n\",\n                \"fct_reorder(df.color, df.a, _fun=min)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 19,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['blue', 'green', 'purple', 'red', 'yellow']\\n\",\n                            \"Categories (5, object): ['red', 'purple', 'green', 'blue', 'yellow']\"\n                        ]\n                    },\n                    \"execution_count\": 19,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_reorder2(df.color, df.a, df.b)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 20,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"image/png\": \"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c+dqw4YNev/991VeXq5+/fpp6tSpCg0N1bFjx5SRkaEZM2Zow4YNcrlcWrFihdatW6d3331XVVVVioqK0vTp09WrVy+9+OKLOnz4sGbNmiVJ+ve//601a9bowIEDCgwM1Lhx43THHXfIMAy98sor2rp1q8rKypSUlKSpU6eqQ4cOdbJXV1fr97//vd5//33V1NRowIABysjIUEhIiCQpNTVVU6dO1ZYtW3TixAlt3LixZT5UNMi55l5ERIQiIyN1zz336F//+pcef/xx3XbbbXr11VfVpUsXzZ8/Xy+88ILeeustOZ1OjR8/Xk8//bRWr16tjh07atmyZXWen5aWppdfflkej0e33HKLbr31Vklq8Nw8evSoVqxYof3790uS+vbtq2nTpik0NLTlP7zWwADOkJOTY9x2221GTk6OYRiGceLECePAgQPG3//+d+O+++4z9u/fb9TU1Bivv/66cf/99xtVVVWGYRjGfffdZ3z22Wfe1ykpKTHGjx9vbN261aipqTF27Nhh3H777cbBgwcNwzCMBx980HjppZcMt9ttVFZWGrt37/Y+d9u2bUZRUZFRU1Nj/PGPfzQmTJhgVFRUtOCngKY4fvy4ccsttxgnT5703veTn/zEeO+994xnn33WmDdvnlFYWGhUVFQYS5cuNZ544gnDMAzj6NGjxrhx44zHHnvMKC0tNSoqKozPP//cuPfee40TJ04YhmEYubm5Rm5urmEYhvGHP/zBeOyxx7zveeeddxpvv/22UVVVZZSWlhp79+41DMMw3n77beO+++4zcnJyjIqKCuN3v/udMXv2bG+2M+fuH/7wB2PGjBlGfn6+cerUKeORRx7x5jMMwxg3bpwxZ84cb374l3PNvaVLlxrr1q0zDMMwvvzyS+Omm24ynnnmGaOystKoqKgwtm7davzoRz8yjh49apSVlRm//vWvjXHjxhlHjx41DMOo9/lr1qwxqqqqjK+//tq45ZZbjMOHDxuG0fC5mZuba+zYscOoqqoyioqKjDlz5hhZWVkt9nm1NmxyQi0Oh0OSdPDgQVVWVioqKkoXX3yxXn/9dd16663q2rWrHA6Hrr32WtlsNn399df1vs6nn36qmJgYXXPNNXI4HOrXr58GDhyov/3tb5KkgIAA5eXlqaCgQE6nU0lJSd7njhgxQuHh4XI4HLrppptUU1OjnJyc5v/Dwyeio6PVo0cPffjhh5KkAwcO6NixYxo0aJC2bt2q+++/X+3bt5fL5dLdd9+t7du311rlP378eAUHB8vlcikgIEBVVVU6ePCgampqFBcXp7i4uDrv+d577ykpKUmjR49WYGCggoODlZiY6H0sNTVVnTp1ksvl0r333qt///vf9Z66/r333tNdd92lDh06KCQkRJMnT9YHH3yg6upq75jbbrvNmx/+5Wxz76qrrqp3/KRJk+R0OuVyufT+++9r3Lhx6tixo4KCgjR+/PhzvpfdbteECRMUGBioyy+/XBdddJF3TcuZzjU34+Li1K9fPwUGBio8PFypqanavXt3Ez+FtotNTqglPj5eP/vZz7RlyxYtX75cPXv2VHp6uvLy8rRu3Tq98MIL3rHV1dU6ceJEva9TUFCgjh071rovNjbWO/6nP/2pXnzxRf385z9XeHi4br75Zo0ZM0bSfzd5vfXWWyooKJDNZlNZWZmKi4ub6U+M5jBixAi99dZbuuGGG/Tee+/pqquuUkVFhSorKzV79uxaY202m06ePOldjomJ8f6+d+/e+uEPf6gXXnhBR44cUf/+/ZWenl5nc9Hx48fPeqKzEydOKDY21rscFBSksLAwnThxos5zvj9vY2Nj5fF4dPLkSW+uM18L/qe+uVdf+QwLC6t1f0FBgaKjo73LZ/6+PqGhoQoMDPQuu1wuVVRU1Bl3rrlZWFioZ599Vrt371Z5ebkMw1BQUNB5/4yoH4UGdaSkpCglJUWVlZVav369VqxYoejoaN16660aPXp0g14jKipKx44dq3VfXl6e9y92fHy8HnjgARmGoV27dmn+/Pnq2bOnCgsLtWnTJi1atEhdunSR3W7X+PHjZXAwnqUMHTpU2dnZOnLkiN5//339+Mc/Vnh4uJxOp5YtW1an7EryzhebzVbr/uuvv17XX3+9Tp06pRUrVmj9+vWaOXNmrTExMTH66quv6s3SoUMH5eXleZfLy8tVUlJS7z40p+dtt27dJP13ztrtdrVv39475vv54F/qm3v1+f7PMSoqSvn5+d7lM3/fFOeamy+88II8Ho+eeuophYeH65NPPtHKlSt98r5tEZucUMuhQ4e0c+dOVVVVKSAgQO3atZPdbtd1112nTZs2af/+/TIMQ+Xl5frHP/6hsrIySVL79u119OhR7+tcccUVysvL01tvvSW3262d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\",\n                        \"text/plain\": [\n                            \"<Figure size 640x480 with 1 Axes>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"<ggplot: (8749823469044)>\"\n                        ]\n                    },\n                    \"execution_count\": 20,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"p9.ggplot(iris) + p9.geom_boxplot(\\n\",\n                \"    p9.aes(x=\\\"Species\\\", y=\\\"Sepal_Width\\\")\\n\",\n                \")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 21,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAjQAAAGyCAYAAADzil5bAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1XUlEQVR4nO3de3iT9eH//1eSNqFnWkppKwg4sVIKCKgIlC8nwSP1XGUiYrXj8NnGhsoGU6AIjnkYoIxSUQ7q5BJBt7EpHnEq6qYydCA6dAgFAqW0tKUtTZvcvz92kR+lBUqb9s7dPh/XxRXu5J3kRfKmvLiPNsMwDAEAAFiY3ewAAAAATUWhAQAAlkehAQAAlkehAQAAlkehAQAAlkehAQAAlkehAQAAlkehAQAAlkehAQAAlkehAQAAlhdidoBTlZaWasqUKUpKStITTzxR75iMjAy5XC7ZbDZJUmpqqubOnduCKQEAQDAJukKzatUqdenSRTU1NWcct2jRInXu3LmFUgEAgGAWVIVm+/btOnDggEaPHq1NmzYF/PULCwsD/po4PZvNprCwMFVWVoproKI5MdfQUphr5oiPjz/rmKApNNXV1crLy9P06dP13//+96zjH3roIXm9XvXo0UMTJ07U+eef3wIpcS7sdrvCw8NVVVUlr9drdhy0Ysw1tBTmWvAKmkKzYcMG9e3bV927dz9roXn00UeVkpKi6upqvfrqq5o9e7aWLVum8PDwWuPcbrfcbrd/2eVyKTk5uVnyoy6Hw1HrFmguzDW0FOZa8AqKQnPgwAG9++67WrJkSYPGp6WlSZJCQ0M1fvx4bd68WTt37tSAAQNqjcvLy1NOTo5/edasWVqwYEHggqNBoqOjzY6ANoK5hpbCXAs+QVFodu7cqeLiYk2ePFmS5PF45PF4NGHCBC1fvrzOmpdTnTja6VSTJk1SRkaGf9nlcqm4uDhwwXFGDodD0dHRKi0tZdUsmhVzDS2FuWaO2NjYs44JikKTnp6u/v37+5c//PBDbd68WbNnz1ZYWFitsXv37lV1dbW6deummpoabdiwQR6PRykpKXVeNykpSUlJSf7lwsJCJqAJvF4vnztaBHMNLYW5FnyCotC4XC65XC7/ckREhBwOh7+RZWZmas6cOerVq5eOHj2q3NxcFRYWyul06sILL1ROTo4iIyPNig8AAExmM9rQcWcctt2yTpTS4uJi/ieDZsVcQ0thrpmjIYdtc+kDAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeUFxHhoAAIJZSUmJcnNz9c033yg+Pl533XWX+vbta3YsnIQ1NAAAnEFVVZUeeOABffTRRzp48KB27NihmTNnavv27WZHw0koNAAAnMG2bdu0f/9+1dTUSJIMw5BhGFq/fr3JyXAyCg0AAGdQUVEhh8NR6z7DMHTs2DGTEqE+FBoAAM4gJSVFPp+v1n0hISG65JJLzAmEelFoAAA4g+TkZD344IMKCQmRzWaTJF1++eW64447TE6Gk3GUEwAAZzF8+HD16dNH+/btU5cuXdShQ4c6a21gLgoNAAANEBcXp44dO/qvto3gwiYnAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeRQaAABgeSFmB2hJTqdTLpfL7Bhths1mkyRFRETIMAyT06A1Y66hpTDXglebKjQej0cej8fsGG2Gw+GQ0+lUeXm5vF6v2XHQijHX0FKYa+ZoyMoINjkBAADLo9AAAADLo9AAAADLo9AAAADLo9AAAADLo9AAANBA5eXlysvLU3l5udlRcAoKDQAADVReXq4VK1ZQaIIQhQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFgehQYAAFie5QtNaWmp7rzzTj3wwANmRwEAACaxfKFZtWqVunTpYnYMAABgIksXmu3bt+vAgQO68sorzY4CAABMZNlCU11drby8PE2ePFk2m83sOAAAwEQhZgdorA0bNqhv377q3r27/vvf/9Y7xu12y+12+5ddLpeSk5NbKmKb53A4at0CzYW5hpZit9v9t8y34GLJQnPgwAG9++67WrJkyRnH5eXlKScnx788a9YsLViwoLnj4RTR0dFmR0AbwVxDc6uqqpIkRUVFKTY21uQ0OJklC83OnTtVXFysyZMnS5I8Ho88Ho8mTJig5cuXKzw8XJI0adIkZWRk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13fffaeuXbuaHQUAAJjAkpucTubz+bR48WL16NFD/fr1q/WY2+2W2+32L7tcLiUnJ7d0xDbLbrf7bx0Oh8lp0JqdmF/MMzQ35lrwsnShMQxDy5YtU1FRkXJycmSz2Wo9npeXp5ycHP/yrFmztGDBgpaO2WaFhoYqOztbSUlJioyMNDsO2oDo6GizI6CNYK4FH5thGIbZIRrDMAwtX75c3333nR555BGFh4fXGcMaGnM5HA5FR0ertLRUXq/X7DhoxZhraCnMNXPExsaedYxl19Dk5eXp22+/1fz58+stM5KUlJSkpKQk/3JhYSET0ARer5fPHS2CuYaWwlwLPpYsNAUFBXr99dcVGhqqrKws//233nqrMjMzTUwGAADMYMlCk5CQoL/85S9mxwAAAEGiVRy2DQAA2jYKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDwKDQAAsDybYRiG2SHQOrndbuXl5WnSpElKSkoyOw5aMeYaWgpzLXixhgbNxu12KycnR2632+woaOWYa2gpzLXgRaEBAACWR6EBAACWR6FBs0lKStKcOXPYzoxmx1xDS2GuBS92CgYAAJbHGhoAAGB5FBoE1Lp167R48eImv859992nL774oumBENSWLVuml156qUWeH6i5CSA4sckJQem+++7TlClTNGDAALOjAGij+DlkLayhwTnxer1mRzijYM+HhuO7BHAuQswOgJaxYcMG7dixQ7Nnz6513/bt2zVr1iytXbtWH3zwgSorK9WvXz9NnjxZkZGROnTokLKzszVt2jStXbtWLpdLS5cu1erVq/Xee+/J4/EoLi5OU6dOVe/evfXSSy9p//79evDBByVJ//nPf7Ry5Urt2bNHoaGhGjt2rG677TYZhqFXX31VmzZtUkVFhVJTUzV58mR16NChTvbq6mq9+OKL+uCDD1RTU6MBAwYoOztbERERkqSMjAxNnjxZGzdu1JEjR7Ru3bqW+VDRIGeaezExMYqNjdXdd9+tf//733r88cd1yy236LXXXlPXrl01Z84cvfDCC3r77bfldDo1btw4Pf3001qxYoU6deqkxYsX13l+ZmamXnnlFfl8Pt100026+eabJanBc/PgwYNaunSpdu/eLUm65JJLNGXKFEVGRrb8h4eAee2117Rx40aVl5crOjpad911l/7f//t/2rx5szZs2KAjR46oa9eumjp1qs4//3w9/vjjOnz4sH7729/Kbrdr7Nixuuuuu/Sf//xHK1asUH5+vjp27KgJEybosssukyTt2rVLeXl5ys/PV2hoqPr166f7779fkvTcc89py5YtKi8vV1JSku677z6lpaWZ+ZG0PgbahMOHDxs33XSTcfToUf99P/vZz4z333/fePbZZ43Zs2cbxcXFxvHjx41FixYZTzzxhGEYhnHw4EFj7NixxmOPPWaUl5cbx48fN7744gvjnnvuMY4cOWIYhmG43W7D7XYbhmEYf/zjH43HHnvM/56333678c477xgej8coLy83vvnmG8MwDOOdd94x7r33XiM/P984fvy48Yc//MGYMWOGP9u9995rfP755/7XnDZtmlFYWGgcO3bMeOSRR/z5DMMwxo4da8ycOdOfH8HlTHNv0aJFxurVqw3DMIyvvvrKuOGGG4xnnnnGqKqqMo4fP25s2rTJ+MlPfmIcPHjQqKioMH77298aY8eONQ4ePGgYhlHv81euXGl4PB7j22+/NW666SZj//79hmE0fG663W5j69athsfjMUpKSoyZM2caubm5LfZ5IfDy8/ONW265xcjPzzcMwzCOHDli7Nmzx/jHP/5h3Hvvvcbu3buNmpoa44033jDuu+8+w+PxGIZR++eQYRhGWVmZMW7cOGPTpk1GTU2NsXXrVuPWW2819u7daxiGYTzwwAPGyy+/bHi9XqOqqsrYsWOH/7mbN282SkpKjJqaGuNPf/qTMX78eH5eBRibnNqI+Ph49ezZUx999JEkac+ePTp06JAGDhyoTZs26b777lP79u3lcrl05513asuWLbVW+Y8bN07h4eFyuVwKCQmRx+PR3r17VVNTo8TERCUmJtZ5z/fff1+pqakaNWqUQkNDFR4erpSUFP9jGRkZ6ty5s1wul+655x795z//qfd04u+//77uuOMOdejQQREREZo4caI+/PBDVVdX+8fccsst/vwILqebe1dccUW94ydMmCCn0ymXy6UPPvhAY8eOVadOnRQWFqZx48ad8b3sdrvGjx+v0NBQXXTRRTrvvPP8a1pOdqa5mZiYqH79+ik0NFTR0dHKyMjQjh07mvgpwEwOh0OStHfvXlVVVSkuLk7nn3++3njjDd18883q1q2bHA6H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rrhCzz77rNq3b6/PP/9ce/fuPe17//73v9eMGTP0y1/+Uk8++aR27tzpLzQLFy6UJE2fPl1vvPGGFi5cqG7dusntduuNN94I0CcFoMUYAHCO/v3vfxsXXnihIcmQZHTv3t34+c9/buzevbvWuK5duxpRUVHG0aNH/fe9++67hiRj06ZNhmEYxnvvvWdIMt58881az7399tuNyy67zL88ePBgIzU11aipqak30+7duw1JxiuvvGIYhmGUlpYakZGRxsyZM2uNy83NNcLCwozCwkLDMAyjV69exvTp0xv3QQAIGmxyAnDO0tLStGPHDv3tb3/TtGnTFBMTo6eeekp9+vTRtm3bao0dMWKEYmJi/MsjR45UXFyc/vGPf0iS3nrrLcXFxWnkyJGqqanx/xo9erT+9a9/yev1qqKiQp9++qnuvvtuORyOBmX8+OOPdezYMd122221XvfKK69UZWWltm/fLknq37+/Vq9erSeeeMJ/HwDrYZMTgEZxOp269tprde2110qS3nzzTV133XWaN2+eXn31Vf+4hISEOs9NSEjw70dTWFiooqIihYaG1vs+brdbNptNPp9PycnJDc5XWFgo6X+FpT75+fmSpKefflpxcXF68skn9eCDD6pLly6aOXOmpkyZ0uD3AmA+Cg2AgLjqqqvUt29f7dy5s9b99Z2XpqCgwL9TcVxcnDp27KjXX3+93tdNSEhQdXW17Hb7OR0SHhcXJ0l69dVX1aVLlzqPd+/eXZIUExOjxYsXa/Hixfr3v/+tJUuWaOrUqUpLS9PQoUMb/H4AzMUmJwDn7NChQ3Xuq6ysVH5+fp0dhDdv3qySkhL/8nvvvaeioiINHDhQknTllVfq8OHDcjqduvTSS+v8cjqdioiI0KBBg/T888/XOkLpTAYNGqTw8HDt27ev3tft0KFDnef07t1bixYtkqQ6xQxAcGMNDYBz1rt3b40dO1ZXXXWVkpKStH//fi1dulSFhYWaNm1arbFRUVG65ppr9Otf/1pHjx7Vr371K11++eW66qqrJEmjR4/W2LFjdfXVV2vGjBnq06ePysvLtWPHDn333Xd69tlnJUkLFy7UyJEjdeWVV2rq1KmKjY3V1q1bFR8fr6ysrDoZ27dvr3nz5mnGjBnat2+fhg8fLofDof/+97/685//rA0bNig8PFxDhgzRTTfdpLS0NDkcDj3//PNyOp2snQEshkID4JzNnTtXGzdu1PTp03X48GHFx8erT58+evfddzVixIhaY2+66SZ17txZkydPVnFxsUaPHq3ly5fXGrN+/XotXLhQy5Yt0549exQTE6O0tDTdc889/jHp6el6//339dBDD2nixIlyOBzq1auX5s+ff9qc999/v8477zz9/ve/19NPP63Q0FD96Ec/0vXXXy+n0ylJGjJkiJ5//nnt3r1bdrtdvXv31saNG9WzZ88AfmIAmhtnCgbQbLp166brr79eS5cuNTsKgFaOfWgAAIDlUWgAAIDlsckJAABYHmtoAACA5VFoAACA5VFoAACA5VFoAACA5VFoAACA5VFoAACA5VFoAACA5VFoAACA5VFoAACA5f1/r708hsGS9A4AAAAASUVORK5CYII=\",\n                        \"text/plain\": [\n                            \"<Figure size 640x480 with 1 Axes>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"<ggplot: (8749823508375)>\"\n                        ]\n                    },\n                    \"execution_count\": 21,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"p9.ggplot(\\n\",\n                \"    iris >> mutate(Species=fct_reorder(f.Species, f.Sepal_Width))\\n\",\n                \") + p9.geom_boxplot(\\n\",\n                \"    p9.aes(x=\\\"Species\\\", y=\\\"Sepal_Width\\\")\\n\",\n                \")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 22,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"image/png\": \"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6y1dulSffvqpKisrFRUVpTFjxigjI6PRsenp6XK5XLLZbJKklJQUzZ0796z/DQAAoHVoVqHZtm2bbr75ZuXl5ckwjAaP22y2sy406enpysrKksvl0pEjRzR37lwlJSUpLS2t0fGLFi1S586dmxMfAAC0Ms0qNFOmTFFMTIzWrFmjlJQUOZ3Ocw5y/vnn11u22Ww6ePDgOb8uAABo/ZpVaHbu3KmXX35Zw4YN82uYNWvW6C9/+Yuqq6uVkJCgESNGnHLsQw89JI/Hox49emjixIkNChEAAGg7mlVoLr74YpWWlvo7i+6++25NmDBB33zzjT7++GNFREQ0Ou7RRx9VcnKyamtr9corr2j27NlatmyZwsPD643Lz89Xfn6+b9nlcikpKcnvuc+Ww+EwOwICwOFw8LU1id1u993yNUAgnZhfzLPg06xCs2jRIk2bNk19+/bVD37wA78Gstls6tGjhz777DOtXbtW9957b4MxqampkqTQ0FCNHz9emzdv1q5duzRgwIB643Jzc5Wdne1bnjVrlhYsWODXvM1RXV1tdgQEQExMjGJjY82O0Sad+J6Kioria4AWER0dbXYEfE+TC03v3r19RxVJ/137kZqaqqSkJLVv377eWJvNps8///ycgnm93nprV07n5FwnmzRpktLT033LLpdLxcXF55TLH0pKSsyOgAAoKSmRy+UyO0abVFZW5rvla4BAcjgcio6OVmlpqTwej9lx2oym/KLS5EIzYMCAUxaHc3X8+HF98sknGjhwoNq1a6evvvpKr7/+um6//fYGY/ft26fa2lp169ZNdXV12rBhg2pqapScnNxgrNvtltvt9i0XFhYGxQQMhgzwP4/Hw9fWJF6v13fL1wAtge/34NPkQrN69eoAxpDefvttPfPMM/J6vYqLi9ONN96o6667TpKUkZGhOXPmqFevXjp27JhycnJUWFgop9Opiy66SNnZ2YqMjAxoPgAAELyatQ9NZmamHn74YXXv3r3BY3v37lV2drZWrlzZ5NeLjIw87b4t69at8/29T58+ysnJObvAAACgVWvWpQ9Wr16tI0eONPpYYWGh1qxZc06hAAAAzkazr+V0qv1pdu/erQ4dOjQ7EAAAwNlq8iannJwc36Yem82mH/7whwoLC6s3pqqqSt99951uu+02/6YEAAA4jSYXmqSkJN95Xnbs2KHk5GR17Nix3hin06mePXs2eu4YAACAQGlyobnhhht0ww03+JYffvhhXXDBBQEJBQAAcDaadZTTqlWr/J0DAACg2ZpcaDIzM8/qhc/msG0AAIBz0eRC889//rPe8oEDB1RYWKi4uDglJCSooKBARUVFio+PV+fOnf0etDX68ssvdejQIbNj4BwVFRWZHQEA2rxmFZpNmzZpypQpeumllzRixAjf/e+++67uvffeoLgApBXMmDHD7AgAALQKzToPzYwZMzRv3rx6ZUaSRo4cqblz5+rBBx/0SzgAAIJJeXm5cnNzVV5ebnYUfE+zdgrevXu34uLiGn0sLi5O33777TmFaisee+yxU36OsI6ioiLWtgFtRHl5uVasWKHhw4erXbt2ZsfBSZpVaFJSUrRw4UINGzas3kUhy8rKtHDhQqWkpPgtYGuWkpKixMREs2PgHLEfFACYr1mF5umnn9bVV1+tzp07a8SIEb6dgjdv3iyPx6NNmzb5OycAAMApNWsfmsGDB2v37t2aPHmySkpK9N5776mkpESTJ0/W7t27NWTIEH/nBAAAOKVmraGRpE6dOmnhwoX+zAIAANAszb7aNgAAQLBo8hqaPn366MUXX1Rqaqp69+4tm812yrE2m02ff/65XwICAACcSZMLzYABAxQREeH7++kKDQAAQEtqcqE5+YKUq1evDkQWAACAZmlyobn++us1dOhQDRkyRJdddplcLlcgcwEAADRZkwtNXl6efvWrX8kwDDmdTvXv319paWkaMmSI0tLSOOMtAAAwTZMLzeeff66ysjJ99NFH2rp1q7Zu3aqcnBw9/vjjstlsSk5O9pWbtLQ0XXjhhYHMDQAA4HNW56GJiorSmDFjNGbMGEmS1+vV559/7is4b775plauXCmbzaa6urqABAYAAPi+czoPjd1uV1xcnOLi4hQbG6vY2FhJUlhYmF/CAQAANMVZraHxeDz65z//6Vsj8+GHHyo/P19du3bVoEGDlJWVpUGDBqlv376BygsAANBAkwvNiBEj9Mknn8jr9ap///4aNGiQxo0bp0GDBnHFaAAAYKomF5q//e1vCg8P1/jx4zV8+HANHjxY3bp1C2A0AACApmlyofniiy98m5oefvhhfffdd0pMTNSgQYM0ePBgDR48WAMGDFBoaGgg8wIAADTQ5EKTmpqq1NRUTZo0SZKUn5+vDz/8UB9++KHWrVunmTNnyuFwqH///hoyZIh+85vfBCw0AADAyZp9lJPb7dYtt9yiJ598Uu+//75ee+01jRo1Sh999JGeeOIJf2YEAAA4rbM6yumEwsJC39qZrVu36rPPPlN1dbXsdrsuueQSpaWl+TunXzidzqC4ZEN5ebnZERAAERERioqKMjtGm1RRUSHpv6eM4GuAQGKuBa8mF5rnnnvOV2B2794twzAUGRmpgQMHasaMGUpLS9OgQYN8V+QORjU1NaqpqTE7BoWmlSovL1dZWZnZMdqkyspK3y1fAwQSc80cTVkZ0eRCk5WVJbfbrSFDhmjq1KkaMmSILrnkEjkcjnMKCQAAcK6aXGi+/fZbde/evVlv8vzzz2vs2LG+MwkDAAD4U5N3Cm5umfF4PLrnnnu0Z8+eZj0fAADgTM7pWk5NZRhGS7wNAABoo5p1lBP8o6CgwOwI8AO+jgBgPgqNCVwul+x2uzIzM82OAj+x2+1BcUoAAGirKDQmiImJ0dq1a1VdXW12lIAqLi7WtGnTtGTJkla/Q7jL5VJMTIzZMQCgzaLQmKQt/Od34pD++Ph4dejQweQ0AIDWjEIDtHIlJSVtYm2g9N+zmHs8HpPTBBZrA4HGBbzQ2O12zZkzR0lJSYF+KwDfU1JSonHjxsnr9ZodpUVMmzbN7AgBZ7fbtXbtWkoN8D1NLjTbtm07qxfu37+/JMlms2nOnDlnlwqAX1RXV8vr9WrlypVKSEgwOw7OUUFBgTIzM1v9GjegOZpcaC699FLZbLYzjjMMQzabrdWv9gWsJCEhQYmJiWbHAICAaXKh2bx5cyBzAAAANFuTC82wYcMCmQMAAKDZWuTSBwAAAIHU7ELzwgsvKC0tTQkJCYqOjm7wBwAAoKU0q9D8/ve/V1ZWllJTU1VYWKiMjAzdcsstcjqdSkhI0AMPPODvnAAAAKfUrELz5JNP6uGHH9bvfvc7SdLUqVO1atUq7dmzRx07dlRkZKRfQwIAAJxOswrN7t27NWTIEDkcDjkcDpWWlkqSoqKi9Itf/EJPPfWUX0MCAACcTrMKTUxMjO/ETuedd56+/PJL32Mej0dHjx71TzoAAIAmaNalDy699FJ98cUXuuqqq5Senq7s7Gx5vV6FhoZq4cKFuuKKK/ydEwAA4JSaVWhmzpypvXv3SpLmzZunvXv36mc/+5m8Xq8uu+wy5ebm+jUkAADA6TSr0FxxxRW+tTDt27fXn/70J1VXV6u6uppDtgEAQIs75xPrGYahI0eOyOl0UmYAAIApml1o3nzzTQ0ZMkRhYWFKTExUWFiYhgwZojfeeMOf+QAAAM6oWYVm1apVuuaaaxQaGqrHH39ca9eu1eOPP66QkBBde+21Wrlypb9zAgAAnFKz9qGZN2+eJk6cqOeee67e/T/5yU90zz336JFHHlFmZqZfAgIAAJxJs9bQFBQU6I477mj0sXHjxqmgoOCcQgEAAJyNZh/ltG3bNo0ePbrBY9u2bdPll19+zsHOZOnSpfr0009VWVmpqKgojRkzRhkZGQF/XwAAEHyaVWgeffRRjRs3TlVVVbrxxhuVkJCggoICvfrqq3r++ee1du1aFRUV+cbHxcX5LfAJ6enpysrKksvl0pEjRzR37lwlJSUpLS3N7+8FAACCW7MKzaBBgyRJ2dnZmjdvnu9+wzAkSYMHD6433uPxNDffKZ1//vn1lm02mw4ePOj39wEAAMGvWYVm5cqVstls/s5y1tasWaO//OUvqq6uVkJCgkaMGGF2JCAoffnllzp06JDZMXCOTl7zDaC+ZhWaiRMn+jlG89x9992aMGGCvvnmG3388ceKiIio93h+fr7y8/N9yy6XS0lJSS0ds82y2+2+W4fDYXKatunE5z5jxgyTk8CfHA5HUH5PlZSU+C5c3FqdKJVtoVy6XC7FxMSYHaPJmlVoTiguLtaOHTuUl5ena665RrGxsaqqqpLT6fT9ZxZoNptNPXr00Geffaa1a9fq3nvv9T2Wm5ur7Oxs3/KsWbO0YMGCFskF+X6wRUVFKTY21uQ0bVNr/8+lrYqJiQm676ljx44pIyNDXq/X7Cgt4ic/+YnZEQLObrfrzTffVPv27c2O0iTNKjRer1cPPfSQnnrqKVVUVMhms+mTTz5RbGysbr75Zg0cOFBz5szxd9YzZjp5bYwkTZo0Senp6b5ll8ul4uLiFs3VlpWVlfluXS6XyWnappKSEknSY489FpCd89GyioqKNGPGDJWUlATd91RBQYG8Xq9WrlyphIQEs+PgHBUUFCgzM1OHDx/27R9rpqYU+GYVmtmzZ2vp0qV68sknNWrUKF188cW+x9LT0/Xss88GtNAcP35cn3zyiQYOHKh27drpq6++0uuvv67bb7+93ji32y232+1bLiwsDMgOymjcid/UvF4vn7tJTnzuKSkpSkxMNDkNztWJ/aA8Hk/QfU+dyJOQkMBca0WCca6dSrMKzerVq/Xoo49q0qRJDf6hF154ob799lu/hDudt99+W88884y8Xq/i4uJ044036rrrrgv4+wIAgODTrEJz9OhR9ezZs9HHPB6PamtrzynUmURGRrIvDAAA8GnWnrsXX3yx3nrrrUYf27Jli1JTU88pFAAAwNlo1hqan//858rKylJoaKhuvfVWSdL+/fv10Ucf6amnntLq1av9mREAAOC0mn0emqKiIs2dO1ePPvqoJOnGG29URESE5s+fzzWVAABAi2r2eWimT5+uH/3oR/rwww9VWFiouLg4DRo0yFIn4QEAAK3DOZ1YLzIyUmPGjPFXFgAAgGZp8k7BhYWF+uKLLxrc/8UXX+jWW29Vr169NGrUKG3cuNGvAQEAAM6kyYVm5syZDa7htHfvXg0dOlR/+tOfFBYWph07duimm27Se++95++cAAAAp9TkQrN161bdeeed9e5btGiRjh8/rr/+9a/69NNP9d133+mKK67Qb37zG78HBQAAOJUmF5oDBw40OL/Mxo0bdckll/j2owkLC9OPf/zjRjdNAQAABEqTC43NZpPNZvMtHz58WHv27NGwYcPqjevcubMKCwv9lxCWFRERoaysLEVERJgdBQDQyjW50CQnJ+vtt9/2Lf/lL3+RzWZrcJRTfn6+Onbs6L+EsKyIiAhNmjSJQgMACLgmH7b905/+VBMmTFBxcbESExOVk5Ojiy66SFdeeWW9cW+88YZ69+7t96AAAACn0uRCc+edd+rAgQN6+umnVVxcrAEDBmjZsmUKCfm/lygoKNDGjRuVnZ0dkLAAAACNOasT682YMUMzZsw45eMJCQk6fPjwOYcCAAA4G8262jYAAEAwodAAAADLo9AAAADLo9AAAADLo9AAAADLo9AAAADLo9AAAADLO6vz0AAAcDpffvmlDh06ZHYMnKOioiKzI5w1Cg3QBhQUFJgdAX5gha/j6U6+CgQShQZoxVwul+x2uzIzM82OAj+x2+1yuVxmxwCCDoUGaMViYmK0du1aVVdXmx0loIqLizVt2jQtWbJEsbGxZscJKJfLpZiYGLNjnNJjjz2muLg4s2PgHBUVFVlubRuFBmjlgvk/P39xOBySpPj4eHXo0MHkNG1bSkqKEhMTzY6Bc2TF/aA4ygkAAFgehQYAAFgehQYAAFgehQYAAFhem9op2Ol0crhjC7LZbJKkiIgIGYZhchq0ZhUVFZKksLAwRUVFmZymbSovLzc7AgIgIiLCMt9TbarQ1NTUqKamxuwYbYbD4ZDT6VR5ebk8Ho/ZcdCKVVZW+m7LyspMTtM2UWhap/Ly8qD4nmrKygg2OQEAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMuj0AAAAMsLMTuAJNXW1mr58uX6/PPPVVZWpvj4eGVkZGjYsGGNjk9PT5fL5ZLNZpMkpaSkaO7cuS2YGAAABJOgKDQej0dxcXGaP3++OnXqpF27dmnevHnq1KmTfvCDHzT6nEWLFqlz584tnBQAcDoFBQVmR4AfWPHrGBSFpl27drrzzjt9yykpKerZs6d27dp1ykIDAAgeLpdLdrtdmZmZZkeBn9jtdrlcLrNjNFlQFJrvq6qq0jfffKOxY8eecsxDDz0kj8ejHj16aOLEiTr//PNbMCEA4GQxMTFau3atqqurzY4SUMXFxZo2bZqWLFmi2NhYs+MElMvlUkxMjNkxmizoCo3X69XixYvVo0cP9evXr9Exjz76qJKTk1VbW6tXXnlFs2fP1rJlyxQeHl5vXH5+vvLz833LLpdLSUlJAc2P/+NwOOrdAoFit9t9t8w388TFxZkdIeBCQ0MlSQkJCYqPjzc5DU4WVIXGMAwtW7ZMRUVFys7O9u30+32pqamS/juxxo8fr82bN2vXrl0aMGBAvXG5ubnKzs72Lc+aNUsLFiwI3D8AjYqOjjY7Alq50NBQZWVlye12KzIy0uw4aMVOrIGKiopq9WtorCZoCo1hGFq+fLn27NmjRx55RGFhYU1+7qmKz6RJk5Senu5bdrlcKi4uPuesaBqHw6Ho6GiVlpbK4/GYHQetmMPh0KRJk1RaWsr3OAKqrKzMd2ul/UusrinlMWgKTW5urr7++mvNnz+/waajk+3bt0+1tbXq1q2b6urqtGHDBtXU1Cg5ObnBWLfbLbfb7VsuLCzkP1YTeDwePne0COYaAs3r9fpumWvBJSgKTUFBgV577TWFhobW20P+1ltvVUZGhjIyMjRnzhz16tVLx44dU05OjgoLC+V0OnXRRRcpOzub1cwAALRhQVFoEhIS9Oc///mUj69bt8739z59+ignJ6clYgEAAIvg0gcAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyQswOgNanpKREOTk5+uqrrxQfH6+77rpLffv2NTsWAKAVYw0N/Kq6uloPPPCAPvjgAx06dEg7d+7UzJkztWPHDrOjAQBaMQoN/Gr79u06cOCA6urqJEmGYcgwDK1fv97kZACA1oxCA7+qqKiQw+God59hGDp+/LhJiQAAbQGFBn6VnJwsr9db776QkBBdcskl5gQCALQJFBr4VVJSkh588EGFhITIZrNJki6//HLdcccdJicDALRmHOUEvxs+fLj69Omj/fv3q0uXLurQoUODtTYAAPgThQYBERcXp44dOyo2NlbFxcVmxwEAtHJscgIAAJZHoQEAAJbXpjY5OZ1OuVwus2O0GSd2Co6IiJBhGCanQWvGXENLqaiokCSFhYUpKirK5DQ4WZsqNDU1NaqpqTE7RpvhcDjkdDpVXl4uj8djdhy0Ysw1tJTKykrfbVlZmclp2o6mrIxgkxMAALA8Cg0AALC8NrXJCUDrwpXdAZzAGhoAlsSV3QGcjEIDwJK4sjuAk1FoAFgSV3YHcDIKDQBL4sruAE5GoQFgSVzZHcDJOMoJgGVxZXcAJ1BoAFgaV3YHILHJCQAAtAIUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkUGgAAYHkhZgdojtraWi1fvlyff/65ysrKFB8fr4yMDA0bNszsaAAAwASWLDQej0dxcXGaP3++OnXqpF27dmnevHnq1KmTfvCDH5gdDwAAtDBLbnJq166d7rzzTiUmJspmsyklJUU9e/bUrl27zI4GAABMYMlC831VVVX65ptv1LVrV7OjAAAAE1hyk9PJvF6vFi9erB49eqhfv371HsvPz1d+fr5v2eVyKSkpqaUjtlkOh6PeLRAozDW0FLvd7rtlvgUXSxcawzC0bNkyFRUVKTs7Wzabrd7jubm5ys7O9i3PmjVLCxYsaOmYbV50dLTZEdBGMNcQaKGhocrKypLb7VZkZKTZcXASm2EYhtkhmsMwDC1fvlzffPONHnnkEYWHhzcYwxoaczkcDkVHR6u0tFQej8fsOGjFmGtoKcw1c8TGxp5xjGXX0OTm5urrr7/W/PnzGy0zkuR2u+V2u33LhYWFTEATeDwePne0COYaWgpzLfhYstAUFBTotddeU2hoqDIzM33333rrrcrIyDAxGQAAMIMlC01CQoL+/Oc/mx0DAAAEiVZx2DYAAGjbKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDyKDQAAMDybIZhGGaHQOuUn5+v3NxcTZo0SW632+w4aMWYa2gpzLXgxRoaBEx+fr6ys7OVn59vdhS0csw1tBTmWvCi0AAAAMuj0AAAAMuj0CBg3G635syZw3ZmBBxzDS2FuRa82CkYAABYHmtoAACA5VFoAJhm2bJlevHFF1vk+evWrdPixYub/V5ou/w1d+677z599tln5x4IjWKTE/zivvvu05QpUzRgwACzowBAUOLnZGCxhgZAUPJ4PGZHQBsR7HMt2PMFixCzAyD4vPrqq9q4caPKy8sVHR2tu+66S//zP/+jzZs3a8OGDTp69Ki6du2qqVOn6vzzz9fjjz+uI0eO6Ne//rXsdrvGjh2ru+66S//+97+1YsUK5eXlqWPHjpowYYIuu+wySdLu3buVm5urvLw8hYaGql+/frr//vslSc8995y2bt2q8vJyud1u3XfffUpNTTXzI8E52LBhg3bu3KnZs2fXu2/Hjh2KiYlRbGys7r77bv3rX//S448/rltuuUWvvvqqunbtqjlz5uiFF17QW2+9JafTqXHjxunpp5/WihUr1KlTJy1evLjB8zMyMvTyyy/L6/Xqpptu0s033yxJevHFF3XgwAE9+OCDkqR///vfWrlypfbu3avQ0FCNHTtWt912mw4dOqSlS5dqz549kqRLLrlEU6ZMUWRkZMt/eDit082tWbNmae3atXrvvfdUWVmpfv36afLkyYqMjNThw4eVlZWladOmae3atXK5XFq6dKlWr16td999VzU1NYqLi9PUqVPVu3fvJs8dwzD0yiuvaNOmTaqoqFBKSoomT56sDh06NMheW1ur3//+93rvvfdUV1enAQMGKCsrSxEREZKk9PR0TZ48WRs3btTRo0e1bt26lvlQrcwATpKXl2fccsstRl5enmEYhnH06FFj7969xt///nfj3nvvNfbs2WPU1dUZr7/+unHfffcZNTU1hmEYxr333mt8+umnvtcpKyszxo0bZ2zatMmoq6sztm3bZtx6663Gvn37DMMwjAceeMB46aWXDI/HY1RXVxs7d+70PXfz5s1GSUmJUVdXZ/zxj380xo8fb1RVVbXgpwB/OnLkiHHTTTcZx44d8933k5/8xNiyZYuxaNEiY/Xq1YZhGMYXX3xh3HDDDcYzzzxjVFdXG1VVVcamTZuMH/3oR8ahQ4eMiooK49e//rUxduxY49ChQ4ZhGI0+f+XKlUZNTY3x9ddfGzfddJNx4MABwzAM4w9/+IPx2GOP+TLdfvvtxttvv23U1NQY5eXlxldffWUYhmHk5+cb27ZtM2pqaoySkhJj5syZRk5OTot9Xmi6082tZ5991pg9e7ZRXFxsVFVVGYsWLTKeeOIJwzAM49ChQ8bYsWONxx57zCgvLzeqqqqMzz77zLjnnnuMo0ePGobx33mQn59vGEbT587bb79t3HvvvUZeXp5RVVVl/O53vzNmzJjhy3byz8k//OEPxrRp04zCwkLj+PHjxiOPPOLLZxiGMXbsWGPmzJm+/DgzNjmhHofDIUnat2+fqqurFRcXp/PPP1+vv/66br75ZnXr1k0Oh0NXX321bDabvv7660Zf55NPPlHHjh111VVXyeFwqF+/frr88sv1t7/9TZIUEhKigoICFRUVyel0KiUlxffc4cOHKzo6Wg6HQzfccIPq6uqUl5cX+H88AiI+Pl49e/bUBx98IEnau3evDh8+rCuuuKLR8RMmTJDT6ZTL5dJ7772nsWPHqlOnTgoLC9O4ceNO+152u13jx49XaGioLr74Yp133nm+NS0n27Jli1JSUjRq1CiFhoYqPDxcycnJkqTExET169dPoaGhio6OVnp6unbu3HmOnwIC4VRza+DAgdq0aZPuu+8+tW/fXi6XS3feeae2bt1a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rrlGkrR161aNHDlSV1xxhZ599lm1b99en376qfbt23fK9/7tb3+rGTNm6Oc//7mefPJJ7dq1y1doFi5cKEmaPn26Xn/9dS1cuFDdunVTfn6+Xn/9dT99UgBajAEAZ+lf//qXcdFFFxmSDElG9+7djZ/+9KfGnj176o3r2rWrERUVZRw7dsx33zvvvGNIMjZt2mQYhmG8++67hiTjjTfeqPfc22+/3bjssst8y4MHDzZSUlKMurq6RjPt2bPHkGS8/PLLhmEYRmlpqREZGWnMnDmz3ricnBwjLCzMKCwsNAzDMHr16mVMnz69eR8EgKDBJicAZy01NVU7d+7UX//6V02bNk0xMTF66qmn1KdPH23fvr3e2BEjRigmJsa3PHLkSMXFxenvf/+7JOnNN99UXFycRo4cqbq6Ot+f0aNH65///Kc8Ho8qKir08ccf6+6775bD4WhSxg8//FDHjx/XbbfdVu91r7zySlVWVmrHjh2SpP79+2v16tV64oknfPcBsB42OQFoFqfTqWuvvVbXXnutJOmNN97Qddddp3nz5umVV17xjUtISGjw3ISEBN9+NIWFhSoqKlJoaGij75Ofny+bzSav16ukpKQm5yssLJT038LSmLy8PEnS008/rbi4OD355JN68MEH1aVLF82cOVNTpkxp8nsBMB+FBoBfXHXVVerbt6927dpV7/7GzktTUFDg26k4Li5OHTt21Guvvdbo6yYkJKi2tlZ2u/2sDgmPi4uTJL3yyivq0qVLg8e7d+8uSYqJidHixYu1ePFi/etf/9KSJUs0depUpaamaujQoU1+PwDmYpMTgLN2+PDhBvdVVlYqLy+vwQ7CmzdvVklJiW/53XffVVFRkQYOHChJuvLKK3XkyBE5nU5deumlDf44nU5FRERo0KBBev755+sdoXQ6gwYNUnh4uPbv39/o63bo0KHBc3r37q1FixZJUoNiBiC4sYYGwFnr3bu3xo4dq6uuukput1sHDhzQ0qVLVVhYqGnTptUbGxUVpWuuuUa//OUvdezYMf3iF7/Q5ZdfrquuukqSNHr0aI0dO1ZXX321ZsyYoT59+qi8vFw7d+7UN998o2effVaStHDhQo0cOVJXXnmlpk6dqtjYWG3btk3x8fHKzMxskLF9+/aaN2+eZsyYof3792v48OFyOBz6z3/+oz/96U/asGGDwsPDNWTIEN10001KTU2Vw+HQ888/L6fTydoZwGIoNADO2ty5c7Vx40ZNnz5dR44cUXx8vPr06aN33nlHI0aMqDf2pptuUufOnTV58mQVFxdr9OjRWr58eb0x69ev18KFC7Vs2TLt3btXMTExSk1N1T333OMbk5aWpi1btuihhx7SxIkT5XA41KtXL82fP/+UOe+//36dd955+u1vf6unn35aoaGhuvDCC3X99dfL6XRKkoYMGaLnn39ee/bskd1uV+/evbVx40b17NnTj58YgEDjTMEAAqZbt266/vrrtXTpUrOjAGjl2IcGAABYHoUGAABYHpucAACA5bGGBgAAWB6FBgAAWB6FBgAAWB6FBgAAWB6FBgAAWB6FBgAAWB6FBgAAWB6FBgAAWB6FBgAAWN7/A0udPIZ5X7oGAAAAAElFTkSuQmCC\",\n                        \"text/plain\": [\n                            \"<Figure size 640x480 with 1 Axes>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"<ggplot: (8749821226873)>\"\n                        ]\n                    },\n                    \"execution_count\": 22,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"p9.ggplot(\\n\",\n                \"    iris >> mutate(Species=fct_reorder(f.Species, f.Sepal_Width, _desc=True))\\n\",\n                \") + p9.geom_boxplot(\\n\",\n                \"    p9.aes(x=\\\"Species\\\", y=\\\"Sepal_Width\\\")\\n\",\n                \")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 23,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"image/png\": \"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\",\n                        \"text/plain\": [\n                            \"<Figure size 640x480 with 1 Axes>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"<ggplot: (8749821203432)>\"\n                        ]\n                    },\n                    \"execution_count\": 23,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"\\n\",\n                \"chks = (\\n\",\n                \"    ChickWeight \\n\",\n                \"    >> filter(as_integer(f.Chick) < 10)\\n\",\n                \"    >> mutate(Chick=fct_shuffle(f.Chick))\\n\",\n                \")\\n\",\n                \"\\n\",\n                \"(\\n\",\n                \"    p9.ggplot(chks, p9.aes(\\\"Time\\\", \\\"weight\\\", colour=\\\"Chick\\\")) \\n\",\n                \"    + p9.geom_point() \\n\",\n                \"    + p9.geom_line()\\n\",\n                \")\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 24,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"image/png\": \"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agA0TeOuu+5q8RiPPfYYmqZRXV3d6vNefPHFjB07tkNtTxUJjUIIIUQ3se3bJGWzoxSd7yV9jLOrmyO2+/Wvf83pp59Oeno6Dz/8MO+//z6///3vWb58OT/60Y9afZxZs2axcOFCMjIyOq+xnUh+hRFCCCG6gVCJSfEjYfrP8pB9mBTv7i7efPNN/vd//5ff/e53/Pd//3fT7UcddRSXXHIJr7/+equPlZOTQ05OTmc0c7+QnkYhhBCii8WqLNY+EKbPYS76zZTA2J383//9H7m5ufzud79r9v5TTjml6e+2bXP77beTm5tLdnY2l1xyCeFwuOn+5oan4/E4v/3tbxk8eDBut5sBAwZw8cUX77U9tm1z2WWXkZ2dzaJFizr+AttAehqFEEKILpSos1l9f5jAUAeFP/RK8e5uxDRNFixYwFlnnYXTue/pAvfeey9HHnkkjz/+OKtXr+bmm28mNzeXv/zlL3t9zllnncXcuXO57bbbOOyww9iyZQtz5szZa3suvPBC5s2bx7x58/b7XEcJjUIIIUQXsaKKNf8M48rQGHyRD02XwNidbN26lXg8TmFhYasen5eXx1NPPQXAiSeeyNdff80LL7yw19D43nvv8cYbb/D0009z3nnnNd2+8993iMfjnHPOOSxevJj58+czbNiwdryijpHhaSGEEKIL2KZi7b/CKFMx9Eo/uksCY3fV2t7f448/fpevR48ezYYNG/b6+A8++ACfz8e5557b4nGj0SinnHIKK1as4OOPP+6SwAgSGoUQQoj9TtmK0icjxKoshl8TwOGTj+PuqE+fPng8HtavX9+qx+++KtrlchGPx/f6+K1bt5KXl7fPULplyxY++ugjZs2a1epez84g36VCCCHEfrbhlRh1y5IMvzqAK1M+irsrh8PBEUccwQcffIBpmik/fp8+faioqEAp1eLjCgsLefrpp7nnnnv485//nPJ2tJZ8pwohhBD7UdWHMTZ/FGfoFQG8+bLbS3d30003UVlZudew9uabb7b72McddxyRSITnnntun489++yzefzxx/n973/P3Xff3e5zdoQshBFCCCH2k5qvEpS/FGPwJT6Cw+QjuCc4+eSTueWWW7j99ttZvnw55557LtnZ2ZSUlPDII49QV1fHySef3K5jH3fccZx88slceumlrFu3jkMPPZSamhpeeOEFnn322T0e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\",\n                        \"text/plain\": [\n                            \"<Figure size 640x480 with 1 Axes>\"\n                        ]\n                    },\n                    \"metadata\": {},\n                    \"output_type\": \"display_data\"\n                },\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"<ggplot: (8749821116657)>\"\n                        ]\n                    },\n                    \"execution_count\": 24,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"(\\n\",\n                \"    p9.ggplot(\\n\",\n                \"        chks >> mutate(Chick=fct_reorder2(f.Chick, f.Time, f.weight)),\\n\",\n                \"        p9.aes(\\\"Time\\\", \\\"weight\\\", colour=\\\"Chick\\\"),\\n\",\n                \"    )\\n\",\n                \"    + p9.geom_point()\\n\",\n                \"    + p9.geom_line()\\n\",\n                \"    + p9.labs(colour=\\\"Chick\\\")\\n\",\n                \")\\n\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_shuffle\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 25,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c']\\n\",\n                            \"Categories (3, object): ['b', 'c', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 25,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct = factor(c(\\\"a\\\", \\\"b\\\", \\\"c\\\"))\\n\",\n                \"fct_shuffle(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 26,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c']\\n\",\n                            \"Categories (3, object): ['c', 'b', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 26,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_shuffle(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_rev\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 27,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['a', 'b', 'c']\\n\",\n                            \"Categories (3, object): ['c', 'b', 'a']\"\n                        ]\n                    },\n                    \"execution_count\": 27,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_rev(fct)\"\n            ]\n        },\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n                \"## fct_shift\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 28,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['Mon', 'Tue', 'Wed']\\n\",\n                            \"Categories (7, object): ['Sun' < 'Mon' < 'Tue' < 'Wed' < 'Thu' < 'Fri' < 'Sat']\"\n                        ]\n                    },\n                    \"execution_count\": 28,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"x = factor(\\n\",\n                \"  c(\\\"Mon\\\", \\\"Tue\\\", \\\"Wed\\\"),\\n\",\n                \"  levels = c(\\\"Sun\\\", \\\"Mon\\\", \\\"Tue\\\", \\\"Wed\\\", \\\"Thu\\\", \\\"Fri\\\", \\\"Sat\\\"),\\n\",\n                \"  ordered = TRUE\\n\",\n                \")\\n\",\n                \"x\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 29,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['Mon', 'Tue', 'Wed']\\n\",\n                            \"Categories (7, object): ['Mon' < 'Tue' < 'Wed' < 'Thu' < 'Fri' < 'Sat' < 'Sun']\"\n                        ]\n                    },\n                    \"execution_count\": 29,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_shift(x)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 30,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['Mon', 'Tue', 'Wed']\\n\",\n                            \"Categories (7, object): ['Tue' < 'Wed' < 'Thu' < 'Fri' < 'Sat' < 'Sun' < 'Mon']\"\n                        ]\n                    },\n                    \"execution_count\": 30,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_shift(x, 2)\"\n            ]\n        },\n        {\n            \"cell_type\": \"code\",\n            \"execution_count\": 31,\n            \"metadata\": {},\n            \"outputs\": [\n                {\n                    \"data\": {\n                        \"text/plain\": [\n                            \"['Mon', 'Tue', 'Wed']\\n\",\n                            \"Categories (7, object): ['Sat' < 'Sun' < 'Mon' < 'Tue' < 'Wed' < 'Thu' < 'Fri']\"\n                        ]\n                    },\n                    \"execution_count\": 31,\n                    \"metadata\": {},\n                    \"output_type\": \"execute_result\"\n                }\n            ],\n            \"source\": [\n                \"fct_shift(x, -1)\"\n            ]\n        }\n    ],\n    \"metadata\": {\n        \"kernelspec\": {\n            \"display_name\": \"Python 3.9.5 ('base')\",\n            \"language\": \"python\",\n            \"name\": \"python3\"\n        },\n        \"language_info\": {\n            \"codemirror_mode\": {\n                \"name\": \"ipython\",\n                \"version\": 3\n            },\n            \"file_extension\": \".py\",\n            \"mimetype\": \"text/x-python\",\n            \"name\": \"python\",\n            \"nbconvert_exporter\": \"python\",\n            \"pygments_lexer\": \"ipython3\",\n            \"version\": \"3.9.5\"\n        },\n        \"orig_nbformat\": 4,\n        \"vscode\": {\n            \"interpreter\": {\n                \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n            }\n        }\n    },\n    \"nbformat\": 4,\n    \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/forcats_lvl_value.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fforcat_lvl_value.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_anon</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Anonymise factor levels\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`f`: A factor.  \\n\",\n       \"&emsp;&emsp;`prefix`: A character prefix to insert in front of the random labels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels anonymised  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_collapse</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Collapse factor levels into manually defined groups\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`**kwargs`: The levels to collapse.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Like `name=[old_level, old_level1, ...]`. The old levels will  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;be replaced with `name`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Replace all levels not named in `kwargs`.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If not, don't collapse them.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels collapsed.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_lump</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Lump together factor levels into \\\"other\\\"\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`f`: A factor  \\n\",\n       \"&emsp;&emsp;`n`: Positive `n` preserves the most common `n` values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Negative `n` preserves the least common `-n` values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;It there are ties, you will get at least `abs(n)` values.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`prop`: Positive `prop` lumps values which do not appear at least  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`prop` of the time. Negative `prop` lumps values that  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;do not appear at most `-prop` of the time.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`w`: An optional numeric vector giving weights for frequency of  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;each value (not level) in f.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;ties_method A character string specifying how ties are treated.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;One of: `average`, `first`, `dense`, `max`, and `min`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels lumped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_lump_min</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### lumps levels that appear fewer than `min_` times.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`min_`: Preserve levels that appear at least `min_` number of times.  \\n\",\n       \"&emsp;&emsp;`w`: An optional numeric vector giving weights for frequency of  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;each value (not level) in f.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels lumped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_lump_prop</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Lumps levels that appear in fewer `prop * n` times.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`prop`: Positive `prop` lumps values which do not appear at least  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`prop` of the time. Negative `prop` lumps values that  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;do not appear at most `-prop` of the time.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`w`: An optional numeric vector giving weights for frequency of  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;each value (not level) in f.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels lumped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_lump_n</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Lumps all levels except for the `n` most frequent.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`f`: A factor  \\n\",\n       \"&emsp;&emsp;`n`: Positive `n` preserves the most common `n` values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Negative `n` preserves the least common `-n` values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;It there are ties, you will get at least `abs(n)` values.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`w`: An optional numeric vector giving weights for frequency of  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;each value (not level) in f.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;ties_method A character string specifying how ties are treated.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;One of: `average`, `first`, `dense`, `max`, and `min`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels lumped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_lump_lowfreq</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### lumps together the least frequent levels, ensuring\\n\",\n       \"that \\\"other\\\" is still the smallest level.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`f`: A factor  \\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels lumped.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_other</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Replace levels with \\\"other\\\"\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`keep`: and  \\n\",\n       \"&emsp;&emsp;`drop`: Pick one of `keep` and `drop`:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- `keep` will preserve listed levels, replacing all others with\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`other_level`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- `drop` will replace listed levels with `other_level`, keeping all\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;as is.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`other_level`: Value of level used for \\\"other\\\" values. Always  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;placed at end of levels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels replaced.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_recode</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Change factor levels by hand\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: A sequence of named character vectors where the name  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;gives the new level, and the value gives the old level.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Levels not otherwise mentioned will be left as is. Levels can  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;be removed by naming them `NULL`.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;As `NULL/None` cannot be a name of keyword arguments, replacement  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;has to be specified as a dict  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(i.e. `fct_recode(x, {NULL: \\\"apple\\\"})`)  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If you want to replace multiple values with the same old value,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;use a `set`/`list`/`numpy.ndarray`  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(i.e. `fct_recode(x, fruit=[\\\"apple\\\", \\\"banana\\\"])`).  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This is a safe way, since `set`/`list`/`numpy.ndarray` is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;not hashable to be a level of a factor.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Do NOT use a `tuple`, as it's hashable!  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Note that the order of the name-value is in the reverse way as  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`dplyr.recode()` and `dplyr.recode_factor()`  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor recoded with given recodings  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_relabel</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Automatically relabel factor levels, collapse as necessary\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`_fun`: A function to be applied to each level. Must accept the old  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;levels and return a character vector of the same length  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;as its input.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Addtional arguments to `_fun`  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels relabeled  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"from datar.data import gss_cat\\n\",\n    \"\\n\",\n    \"gss_cat >>= mutate(rincome=as_factor(f.rincome))\\n\",\n    \"\\n\",\n    \"nb_header(\\n\",\n    \"    fct_anon,\\n\",\n    \"    fct_collapse,\\n\",\n    \"    fct_lump,\\n\",\n    \"    fct_lump_min,\\n\",\n    \"    fct_lump_prop,\\n\",\n    \"    fct_lump_n,\\n\",\n    \"    fct_lump_lowfreq,\\n\",\n    \"    fct_other,\\n\",\n    \"    fct_recode,\\n\",\n    \"    fct_relabel,\\n\",\n    \"    book=\\\"forcat_lvl_value\\\",\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_anon\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Buddhism</td>\\n\",\n       \"      <td>147</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Catholic</td>\\n\",\n       \"      <td>5124</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Christian</td>\\n\",\n       \"      <td>689</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Hinduism</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Inter-nondenominational</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Jewish</td>\\n\",\n       \"      <td>388</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Moslem/islam</td>\\n\",\n       \"      <td>104</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Native american</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>None</td>\\n\",\n       \"      <td>3523</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Orthodox-christian</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Other</td>\\n\",\n       \"      <td>224</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Other eastern</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Protestant</td>\\n\",\n       \"      <td>10846</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          f       n\\n\",\n       \"                 <category> <int64>\\n\",\n       \"0                  Buddhism     147\\n\",\n       \"1                  Catholic    5124\\n\",\n       \"2                 Christian     689\\n\",\n       \"3                Don't know      15\\n\",\n       \"4                  Hinduism      71\\n\",\n       \"5   Inter-nondenominational     109\\n\",\n       \"6                    Jewish     388\\n\",\n       \"7              Moslem/islam     104\\n\",\n       \"8           Native american      23\\n\",\n       \"9                 No answer      93\\n\",\n       \"10                     None    3523\\n\",\n       \"11       Orthodox-christian      95\\n\",\n       \"12                    Other     224\\n\",\n       \"13            Other eastern      32\\n\",\n       \"14               Protestant   10846\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gss_cat.relig >> fct_count()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>00</td>\\n\",\n       \"      <td>147</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>01</td>\\n\",\n       \"      <td>104</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>02</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>03</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>04</td>\\n\",\n       \"      <td>5124</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>05</td>\\n\",\n       \"      <td>689</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>06</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>07</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>08</td>\\n\",\n       \"      <td>224</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>09</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>3523</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>10846</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>388</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            f       n\\n\",\n       \"   <category> <int64>\\n\",\n       \"0          00     147\\n\",\n       \"1          01     104\\n\",\n       \"2          02      93\\n\",\n       \"3          03     109\\n\",\n       \"4          04    5124\\n\",\n       \"5          05     689\\n\",\n       \"6          06      32\\n\",\n       \"7          07      15\\n\",\n       \"8          08     224\\n\",\n       \"9          09      71\\n\",\n       \"10         10    3523\\n\",\n       \"11         11   10846\\n\",\n       \"12         12      23\\n\",\n       \"13         13     388\\n\",\n       \"14         14      95\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gss_cat.relig >> fct_anon() >> fct_count()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>X00</td>\\n\",\n       \"      <td>388</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>X01</td>\\n\",\n       \"      <td>689</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>X02</td>\\n\",\n       \"      <td>224</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>X03</td>\\n\",\n       \"      <td>3523</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>X04</td>\\n\",\n       \"      <td>5124</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>X05</td>\\n\",\n       \"      <td>147</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>X06</td>\\n\",\n       \"      <td>10846</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>X07</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>X08</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>X09</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>X10</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>X11</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>X12</td>\\n\",\n       \"      <td>104</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>X13</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>X14</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            f       n\\n\",\n       \"   <category> <int64>\\n\",\n       \"0         X00     388\\n\",\n       \"1         X01     689\\n\",\n       \"2         X02     224\\n\",\n       \"3         X03    3523\\n\",\n       \"4         X04    5124\\n\",\n       \"5         X05     147\\n\",\n       \"6         X06   10846\\n\",\n       \"7         X07     109\\n\",\n       \"8         X08      95\\n\",\n       \"9         X09      23\\n\",\n       \"10        X10      15\\n\",\n       \"11        X11      71\\n\",\n       \"12        X12     104\\n\",\n       \"13        X13      32\\n\",\n       \"14        X14      93\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gss_cat.relig >> fct_anon(\\\"X\\\") >> fct_count()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_collapse\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Ind,near dem</td>\\n\",\n       \"      <td>2499</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Ind,near rep</td>\\n\",\n       \"      <td>1791</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Independent</td>\\n\",\n       \"      <td>4119</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>154</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Not str democrat</td>\\n\",\n       \"      <td>3690</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Not str republican</td>\\n\",\n       \"      <td>3032</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Other party</td>\\n\",\n       \"      <td>393</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Strong democrat</td>\\n\",\n       \"      <td>3490</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Strong republican</td>\\n\",\n       \"      <td>2314</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    f       n\\n\",\n       \"           <category> <int64>\\n\",\n       \"0          Don't know       1\\n\",\n       \"1        Ind,near dem    2499\\n\",\n       \"2        Ind,near rep    1791\\n\",\n       \"3         Independent    4119\\n\",\n       \"4           No answer     154\\n\",\n       \"5    Not str democrat    3690\\n\",\n       \"6  Not str republican    3032\\n\",\n       \"7         Other party     393\\n\",\n       \"8     Strong democrat    3490\\n\",\n       \"9   Strong republican    2314\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_count(gss_cat.partyid)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>missing</td>\\n\",\n       \"      <td>155</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>ind</td>\\n\",\n       \"      <td>8409</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>dem</td>\\n\",\n       \"      <td>7180</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>rep</td>\\n\",\n       \"      <td>5346</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>other</td>\\n\",\n       \"      <td>393</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           f       n\\n\",\n       \"  <category> <int64>\\n\",\n       \"0    missing     155\\n\",\n       \"1        ind    8409\\n\",\n       \"2        dem    7180\\n\",\n       \"3        rep    5346\\n\",\n       \"4      other     393\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"partyid2 = fct_collapse(\\n\",\n    \"    gss_cat.partyid,\\n\",\n    \"    missing = c(\\\"No answer\\\", \\\"Don't know\\\"),\\n\",\n    \"    other = \\\"Other party\\\",\\n\",\n    \"    rep = c(\\\"Strong republican\\\", \\\"Not str republican\\\"),\\n\",\n    \"    ind = c(\\\"Ind,near rep\\\", \\\"Independent\\\", \\\"Ind,near dem\\\"),\\n\",\n    \"    dem = c(\\\"Not str democrat\\\", \\\"Strong democrat\\\")\\n\",\n    \")\\n\",\n    \"fct_count(partyid2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_recode\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['fruit', 'bear', 'fruit', 'dear']\\n\",\n       \"Categories (3, object): ['fruit', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = factor(c(\\\"apple\\\", \\\"bear\\\", \\\"banana\\\", \\\"dear\\\"))\\n\",\n    \"fct_recode(x, fruit=[\\\"apple\\\", \\\"banana\\\"])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:01:25][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['fruit', 'bear', 'banana', 'dear']\\n\",\n       \"Categories (4, object): ['fruit', 'banana', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# If you make a mistake you'll get a warning\\n\",\n    \"fct_recode(x, fruit=[\\\"apple\\\", \\\"bananana\\\"])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[NaN, 'fruit', 'bear', 'dear']\\n\",\n       \"Categories (3, object): ['fruit', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_recode(x, {NULL: \\\"apple\\\"}, fruit = \\\"banana\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['an apple', 'a bear', 'banana', 'dear']\\n\",\n       \"Categories (4, object): ['an apple', 'banana', 'a bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Anything cannot be a keyword directly, use a dict\\n\",\n    \"fct_recode(x, {\\\"an apple\\\": \\\"apple\\\", \\\"a bear\\\": \\\"bear\\\"})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_lump, fct_lump_min, fct_lump_prop, fct_lump_n, and fct_lump_lowfreq\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>C</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>E</th>\\n\",\n       \"      <th>F</th>\\n\",\n       \"      <th>G</th>\\n\",\n       \"      <th>H</th>\\n\",\n       \"      <th>I</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            A       B       C       D       E       F       G       H       I\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64>\\n\",\n       \"count      40      10       5      27       1       1       1       1       1\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = factor(rep(LETTERS[:9], times = c(40, 10, 5, 27, 1, 1, 1, 1, 1)))\\n\",\n    \"table(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['A', 'A', 'A', 'A', 'A', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\\n\",\n       \"Length: 87\\n\",\n       \"Categories (4, object): ['A', 'B', 'D', 'Other']\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            A       B       D   Other\\n\",\n       \"      <int64> <int64> <int64> <int64>\\n\",\n       \"count      40      10      27      10\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x >> fct_lump_n(3) \\n\",\n    \"table(_)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['A', 'A', 'A', 'A', 'A', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\\n\",\n       \"Length: 87\\n\",\n       \"Categories (4, object): ['A', 'B', 'D', 'Other']\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            A       B       D   Other\\n\",\n       \"      <int64> <int64> <int64> <int64>\\n\",\n       \"count      40      10      27      10\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x >> fct_lump_prop(0.10) \\n\",\n    \"table(_)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['A', 'A', 'A', 'A', 'A', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\\n\",\n       \"Length: 87\\n\",\n       \"Categories (5, object): ['A', 'B', 'C', 'D', 'Other']\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>C</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            A       B       C       D   Other\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64>\\n\",\n       \"count      40      10       5      27       5\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x >> fct_lump_min(5) \\n\",\n    \"table(_)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['A', 'A', 'A', 'A', 'A', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\\n\",\n       \"Length: 87\\n\",\n       \"Categories (3, object): ['A', 'D', 'Other']\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            A       D   Other\\n\",\n       \"      <int64> <int64> <int64>\\n\",\n       \"count      40      27      20\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x >> fct_lump_lowfreq() \\n\",\n    \"table(_)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'I', 'E', ..., 'D', 'E', 'L', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (12, object): ['B', 'C', 'D', 'E', ..., 'J', 'K', 'L', 'M']\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = factor(LETTERS[rpois(100, 5)])\\n\",\n    \"x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>C</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>E</th>\\n\",\n       \"      <th>F</th>\\n\",\n       \"      <th>G</th>\\n\",\n       \"      <th>H</th>\\n\",\n       \"      <th>I</th>\\n\",\n       \"      <th>J</th>\\n\",\n       \"      <th>K</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            B       C       D       E       F       G       H       I       J  \\\\\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64>   \\n\",\n       \"count       1       9      17      18      18      13       8       8       4   \\n\",\n       \"\\n\",\n       \"            K       L       M  \\n\",\n       \"      <int64> <int64> <int64>  \\n\",\n       \"count       1       1       2  \"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"      <th>C</th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>E</th>\\n\",\n       \"      <th>F</th>\\n\",\n       \"      <th>G</th>\\n\",\n       \"      <th>H</th>\\n\",\n       \"      <th>I</th>\\n\",\n       \"      <th>J</th>\\n\",\n       \"      <th>K</th>\\n\",\n       \"      <th>L</th>\\n\",\n       \"      <th>M</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            B       C       D       E       F       G       H       I       J  \\\\\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64>   \\n\",\n       \"count       1       9      17      18      18      13       8       8       4   \\n\",\n       \"\\n\",\n       \"            K       L       M  \\n\",\n       \"      <int64> <int64> <int64>  \\n\",\n       \"count       1       1       2  \"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table(fct_lump_lowfreq(x))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'Other', 'E', ..., 'D', 'E', 'Other', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (4, object): ['D', 'E', 'F', 'Other']\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_lump_n(x, n = 3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'Other', 'E', ..., 'D', 'E', 'Other', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (5, object): ['D', 'E', 'F', 'G', 'Other']\"\n      ]\n     },\n     \"execution_count\": 20,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_lump_prop(x, prop = 0.1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['Other', 'Other', 'Other', 'Other', 'Other', ..., 'Other', 'Other', 'L', 'Other', 'Other']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (4, object): ['B', 'K', 'L', 'Other']\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Use negative values to collapse the most common\\n\",\n    \"fct_lump_n(x, n = -3)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['Other', 'Other', 'Other', 'I', 'Other', ..., 'Other', 'Other', 'L', 'Other', 'Other']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (9, object): ['B', 'C', 'H', 'I', ..., 'K', 'L', 'M', 'Other']\"\n      ]\n     },\n     \"execution_count\": 22,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_lump_prop(x, prop = -0.1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'Other', 'E', ..., 'D', 'E', 'Other', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (6, object): ['B', 'C', 'D', 'E', 'H', 'Other']\"\n      ]\n     },\n     \"execution_count\": 23,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"w = c(rep(2, 50), rep(1, 50))\\n\",\n    \"fct_lump_n(x, n = 5, w = w)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'I', 'E', ..., 'D', 'E', 'Other', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (8, object): ['C', 'D', 'E', 'F', 'G', 'H', 'I', 'Other']\"\n      ]\n     },\n     \"execution_count\": 24,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_lump_n(x, n = 6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'Other', 'E', ..., 'D', 'E', 'Other', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (6, object): ['C', 'D', 'E', 'F', 'G', 'Other']\"\n      ]\n     },\n     \"execution_count\": 25,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_lump_n(x, n = 6, ties_method = \\\"max\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>E</th>\\n\",\n       \"      <th>F</th>\\n\",\n       \"      <th>G</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            D       E       F       G   Other\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64>\\n\",\n       \"count      17      18      18      13      34\"\n      ]\n     },\n     \"execution_count\": 26,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Use fct_lump_min() to lump together all levels with fewer than `n` values\\n\",\n    \"table(fct_lump_min(x, min = 10))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>D</th>\\n\",\n       \"      <th>E</th>\\n\",\n       \"      <th>F</th>\\n\",\n       \"      <th>Other</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>47</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            D       E       F   Other\\n\",\n       \"      <int64> <int64> <int64> <int64>\\n\",\n       \"count      17      18      18      47\"\n      ]\n     },\n     \"execution_count\": 27,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table(fct_lump_min(x, min = 15))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_other\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['Other', 'Other', 'Other', 'Other', 'Other', ..., 'Other', 'Other', 'Other', 'Other', 'Other']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (2, object): ['B', 'Other']\"\n      ]\n     },\n     \"execution_count\": 28,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_other(x, keep = c(\\\"A\\\", \\\"B\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['D', 'E', 'D', 'I', 'E', ..., 'D', 'E', 'L', 'D', 'E']\\n\",\n       \"Length: 100\\n\",\n       \"Categories (12, object): ['C', 'D', 'E', 'F', ..., 'K', 'L', 'M', 'Other']\"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_other(x, drop = c(\\\"A\\\", \\\"B\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_recode\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 30,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['fruit', 'bear', 'fruit', 'dear']\\n\",\n       \"Categories (3, object): ['fruit', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 30,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = factor(c(\\\"apple\\\", \\\"bear\\\", \\\"banana\\\", \\\"dear\\\"))\\n\",\n    \"fct_recode(x, fruit = [\\\"apple\\\", \\\"banana\\\"])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 31,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:01:52][datar][WARNING] [fct_recode] Unknown levels in `_f`: {'bananana'}\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['fruit', 'bear', 'banana', 'dear']\\n\",\n       \"Categories (4, object): ['fruit', 'banana', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 31,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# If you make a mistake you'll get a warning\\n\",\n    \"fct_recode(x, fruit = [\\\"apple\\\", \\\"bananana\\\"])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 32,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[NaN, 'fruit', 'bear', 'dear']\\n\",\n       \"Categories (3, object): ['fruit', 'bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 32,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# If you name the level NULL it will be removed\\n\",\n    \"fct_recode(x, {NULL: \\\"apple\\\"}, fruit = \\\"banana\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 33,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['an apple', 'a bear', 'banana', 'dear']\\n\",\n       \"Categories (4, object): ['an apple', 'banana', 'a bear', 'dear']\"\n      ]\n     },\n     \"execution_count\": 33,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_recode(x, {\\\"an apple\\\": \\\"apple\\\", \\\"a bear\\\": \\\"bear\\\"})\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_relabel\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 34,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Ind,near dem</td>\\n\",\n       \"      <td>2499</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Ind,near rep</td>\\n\",\n       \"      <td>1791</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Independent</td>\\n\",\n       \"      <td>4119</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>154</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Not str democrat</td>\\n\",\n       \"      <td>3690</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Not str republican</td>\\n\",\n       \"      <td>3032</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Other party</td>\\n\",\n       \"      <td>393</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Strong democrat</td>\\n\",\n       \"      <td>3490</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Strong republican</td>\\n\",\n       \"      <td>2314</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    f       n\\n\",\n       \"           <category> <int64>\\n\",\n       \"0          Don't know       1\\n\",\n       \"1        Ind,near dem    2499\\n\",\n       \"2        Ind,near rep    1791\\n\",\n       \"3         Independent    4119\\n\",\n       \"4           No answer     154\\n\",\n       \"5    Not str democrat    3690\\n\",\n       \"6  Not str republican    3032\\n\",\n       \"7         Other party     393\\n\",\n       \"8     Strong democrat    3490\\n\",\n       \"9   Strong republican    2314\"\n      ]\n     },\n     \"execution_count\": 34,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gss_cat.partyid >> fct_count()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 35,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Ind, near dem</td>\\n\",\n       \"      <td>2499</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Ind, near rep</td>\\n\",\n       \"      <td>1791</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Independent</td>\\n\",\n       \"      <td>4119</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>154</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Not str democrat</td>\\n\",\n       \"      <td>3690</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Not str republican</td>\\n\",\n       \"      <td>3032</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Other party</td>\\n\",\n       \"      <td>393</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Strong democrat</td>\\n\",\n       \"      <td>3490</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Strong republican</td>\\n\",\n       \"      <td>2314</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    f       n\\n\",\n       \"           <category> <int64>\\n\",\n       \"0          Don't know       1\\n\",\n       \"1       Ind, near dem    2499\\n\",\n       \"2       Ind, near rep    1791\\n\",\n       \"3         Independent    4119\\n\",\n       \"4           No answer     154\\n\",\n       \"5    Not str democrat    3690\\n\",\n       \"6  Not str republican    3032\\n\",\n       \"7         Other party     393\\n\",\n       \"8     Strong democrat    3490\\n\",\n       \"9   Strong republican    2314\"\n      ]\n     },\n     \"execution_count\": 35,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gss_cat.partyid >> fct_relabel(lambda old: gsub(\\\",\\\", \\\", \\\", old)) >> fct_count()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 36,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>$1000 to 2999</td>\\n\",\n       \"      <td>395</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>$10000 - 14999</td>\\n\",\n       \"      <td>1168</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>$15000 - 19999</td>\\n\",\n       \"      <td>1048</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>$20000 - 24999</td>\\n\",\n       \"      <td>1283</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>$25000 or more</td>\\n\",\n       \"      <td>7363</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>$3000 to 3999</td>\\n\",\n       \"      <td>276</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>$4000 to 4999</td>\\n\",\n       \"      <td>226</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>$5000 to 5999</td>\\n\",\n       \"      <td>227</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>$6000 to 6999</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>$7000 to 7999</td>\\n\",\n       \"      <td>188</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>$8000 to 9999</td>\\n\",\n       \"      <td>340</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Lt $1000</td>\\n\",\n       \"      <td>286</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>183</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Not applicable</td>\\n\",\n       \"      <td>7043</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Refused</td>\\n\",\n       \"      <td>975</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 f       n\\n\",\n       \"        <category> <int64>\\n\",\n       \"0    $1000 to 2999     395\\n\",\n       \"1   $10000 - 14999    1168\\n\",\n       \"2   $15000 - 19999    1048\\n\",\n       \"3   $20000 - 24999    1283\\n\",\n       \"4   $25000 or more    7363\\n\",\n       \"5    $3000 to 3999     276\\n\",\n       \"6    $4000 to 4999     226\\n\",\n       \"7    $5000 to 5999     227\\n\",\n       \"8    $6000 to 6999     215\\n\",\n       \"9    $7000 to 7999     188\\n\",\n       \"10   $8000 to 9999     340\\n\",\n       \"11      Don't know     267\\n\",\n       \"12        Lt $1000     286\\n\",\n       \"13       No answer     183\\n\",\n       \"14  Not applicable    7043\\n\",\n       \"15         Refused     975\"\n      ]\n     },\n     \"execution_count\": 36,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_count(gss_cat.rincome)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 37,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['Gt $0.0', 'Gt $10000.0', 'Gt $15000.0', 'Gt $20000.0',\\n\",\n       \"       'Gt $25000.0', 'Gt $0.0', 'Gt $0.0', 'Gt $5000.0', 'Gt $5000.0',\\n\",\n       \"       'Gt $5000.0', 'Gt $5000.0', \\\"Don't know\\\", 'Gt $0.0', 'No answer',\\n\",\n       \"       'Not applicable', 'Refused'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 37,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"def convert_income(income):\\n\",\n    \"    regex = r\\\"^(?:Lt |)[$]([0-9]+).*$\\\"\\n\",\n    \"    is_range = grepl(regex, income)\\n\",\n    \"    num_income = as_numeric(gsub(regex, r\\\"\\\\1\\\", income[is_range]))\\n\",\n    \"    num_income = trunc(num_income / 5000) * 5000\\n\",\n    \"    income[is_range] = paste0(\\\"Gt $\\\", num_income)\\n\",\n    \"    return income\\n\",\n    \"\\n\",\n    \"convert_income(levels(gss_cat.rincome))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 38,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Gt $0.0</td>\\n\",\n       \"      <td>1183</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Gt $10000.0</td>\\n\",\n       \"      <td>1168</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Gt $15000.0</td>\\n\",\n       \"      <td>1048</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Gt $20000.0</td>\\n\",\n       \"      <td>1283</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Gt $25000.0</td>\\n\",\n       \"      <td>7363</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Gt $5000.0</td>\\n\",\n       \"      <td>970</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Don't know</td>\\n\",\n       \"      <td>267</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>No answer</td>\\n\",\n       \"      <td>183</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Not applicable</td>\\n\",\n       \"      <td>7043</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Refused</td>\\n\",\n       \"      <td>975</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                f       n\\n\",\n       \"       <category> <int64>\\n\",\n       \"0         Gt $0.0    1183\\n\",\n       \"1     Gt $10000.0    1168\\n\",\n       \"2     Gt $15000.0    1048\\n\",\n       \"3     Gt $20000.0    1283\\n\",\n       \"4     Gt $25000.0    7363\\n\",\n       \"5      Gt $5000.0     970\\n\",\n       \"6      Don't know     267\\n\",\n       \"7       No answer     183\\n\",\n       \"8  Not applicable    7043\\n\",\n       \"9         Refused     975\"\n      ]\n     },\n     \"execution_count\": 38,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rincome2 = fct_relabel(gss_cat.rincome, convert_income)\\n\",\n    \"fct_count(rincome2)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/forcats_misc.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fforcat_lvl_addrm.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ as_factor</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Convert a vector to a factor vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_count</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Count entries in a factor\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`sort`: If True, sort the result so that the most common values float to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;the top  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`prop`: If True, compute the fraction of marginal table.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with columns `f`, `n` and `p`, if prop is True  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_match</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Test for presence of levels in a factor\\n\",\n       \"\\n\",\n       \"Do any of `lvls` occur in `_f`?  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`lvls`: A vector specifying levels to look for.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A logical factor  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ fct_unique</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Unique values of a factor\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with the unique values in `_f`  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lvls_reorder</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Leaves values of a factor as they are, but changes the order by\\n\",\n       \"given indices  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`f`: A factor (or character vector).  \\n\",\n       \"&emsp;&emsp;`idx`: A integer index, with one integer for each existing level.  \\n\",\n       \"&emsp;&emsp;`new_levels`: A character vector of new levels.  \\n\",\n       \"&emsp;&emsp;`ordered`: A logical which determines the \\\"ordered\\\" status of the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;output factor. `None` preserves the existing status of the factor.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with levels reordered  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lvls_revalue</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### changes the values of existing levels; there must\\n\",\n       \"be one new level for each old level  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`new_levels`: A character vector of new levels.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with the new levels  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lvls_expand</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Expands the set of levels; the new levels must\\n\",\n       \"include the old levels.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_f`: A factor  \\n\",\n       \"&emsp;&emsp;`new_levels`: The new levels. Must include the old ones  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The factor with the new levels  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lvls_union</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Find all levels in a list of factors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`fs`: A list of factors  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A list of all levels  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"import numpy\\n\",\n    \"from datar.all import *\\n\",\n    \"from datar.data import gss_cat\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"nb_header(\\n\",\n    \"    as_factor,\\n\",\n    \"    fct_count,\\n\",\n    \"    fct_match,\\n\",\n    \"    fct_unique,\\n\",\n    \"    lvls_reorder,\\n\",\n    \"    lvls_revalue,\\n\",\n    \"    lvls_expand,\\n\",\n    \"    lvls_union,\\n\",\n    \"    book=\\\"forcat_lvl_addrm\\\",\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## as_factor\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'z', 'g']\\n\",\n       \"Categories (3, object): ['a', 'g', 'z']\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = c(\\\"a\\\", \\\"z\\\", \\\"g\\\")\\n\",\n    \"as_factor(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['1.1', '11', '2.2', '22']\\n\",\n       \"Categories (4, object): ['1.1', '11', '2.2', '22']\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"y = c(\\\"1.1\\\", \\\"11\\\", \\\"2.2\\\", \\\"22\\\")\\n\",\n    \"as_factor(y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"FutureWarning: Index.ravel returning ndarray is deprecated; in a future version this will return a view on self.\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[1.1, 11.0, 2.2, 22.0]\\n\",\n       \"Categories (4, float64): [1.1, 2.2, 11.0, 22.0]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"z = as_numeric(y)\\n\",\n    \"as_factor(z)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_count\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>i</th>\\n\",\n       \"      <th>k</th>\\n\",\n       \"      <th>l</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"      <th>o</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th>q</th>\\n\",\n       \"      <th>r</th>\\n\",\n       \"      <th>s</th>\\n\",\n       \"      <th>t</th>\\n\",\n       \"      <th>u</th>\\n\",\n       \"      <th>v</th>\\n\",\n       \"      <th>w</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >...</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>88</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>67</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>134</td>\\n\",\n       \"      <td>128</td>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>112</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>1 rows × 21 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            b       c       d       e       i       k       l       m       n  \\\\\\n\",\n       \"      <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64> <int64>   \\n\",\n       \"count       8      88      37       1      45      67       2      14     105   \\n\",\n       \"\\n\",\n       \"            o  ...       q       r       s       t       u       v       w  \\\\\\n\",\n       \"      <int64>  ... <int64> <int64> <int64> <int64> <int64> <int64> <int64>   \\n\",\n       \"count       4            5      22       1      87      49      17     134   \\n\",\n       \"\\n\",\n       \"            x       y       z  \\n\",\n       \"      <int64> <int64> <int64>  \\n\",\n       \"count     128      72     112  \\n\",\n       \"\\n\",\n       \"[1 rows x 21 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct = factor(sample(letters)[rpois(1000, 10)])\\n\",\n    \"table(fct)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>88</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>e</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>i</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>k</td>\\n\",\n       \"      <td>67</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>l</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>n</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>o</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>p</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>q</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>r</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>s</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>t</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>u</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>v</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>w</td>\\n\",\n       \"      <td>134</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>128</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>72</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>112</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            f       n\\n\",\n       \"   <category> <int64>\\n\",\n       \"0           b       8\\n\",\n       \"1           c      88\\n\",\n       \"2           d      37\\n\",\n       \"3           e       1\\n\",\n       \"4           i      45\\n\",\n       \"5           k      67\\n\",\n       \"6           l       2\\n\",\n       \"7           m      14\\n\",\n       \"8           n     105\\n\",\n       \"9           o       4\\n\",\n       \"10          p       2\\n\",\n       \"11          q       5\\n\",\n       \"12          r      22\\n\",\n       \"13          s       1\\n\",\n       \"14          t      87\\n\",\n       \"15          u      49\\n\",\n       \"16          v      17\\n\",\n       \"17          w     134\\n\",\n       \"18          x     128\\n\",\n       \"19          y      72\\n\",\n       \"20          z     112\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_count(fct)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>w</td>\\n\",\n       \"      <td>134</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>128</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>112</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>n</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>88</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>t</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>72</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>k</td>\\n\",\n       \"      <td>67</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>u</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>i</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>r</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>v</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>q</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>o</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>l</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>p</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>e</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>s</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            f       n\\n\",\n       \"   <category> <int64>\\n\",\n       \"17          w     134\\n\",\n       \"18          x     128\\n\",\n       \"20          z     112\\n\",\n       \"8           n     105\\n\",\n       \"1           c      88\\n\",\n       \"14          t      87\\n\",\n       \"19          y      72\\n\",\n       \"5           k      67\\n\",\n       \"15          u      49\\n\",\n       \"4           i      45\\n\",\n       \"2           d      37\\n\",\n       \"12          r      22\\n\",\n       \"16          v      17\\n\",\n       \"7           m      14\\n\",\n       \"0           b       8\\n\",\n       \"11          q       5\\n\",\n       \"9           o       4\\n\",\n       \"6           l       2\\n\",\n       \"10          p       2\\n\",\n       \"3           e       1\\n\",\n       \"13          s       1\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_count(fct, sort = TRUE)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"      <th>p</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>w</td>\\n\",\n       \"      <td>134</td>\\n\",\n       \"      <td>0.134</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>128</td>\\n\",\n       \"      <td>0.128</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>112</td>\\n\",\n       \"      <td>0.112</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>n</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>0.105</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>88</td>\\n\",\n       \"      <td>0.088</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>t</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"      <td>0.087</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>0.072</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>k</td>\\n\",\n       \"      <td>67</td>\\n\",\n       \"      <td>0.067</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>u</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>0.049</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>i</td>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>0.045</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>0.037</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>r</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>0.022</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>v</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>0.017</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>0.014</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>0.008</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>q</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>0.005</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>o</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0.004</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>l</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.002</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>p</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.002</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>e</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.001</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>s</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.001</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            f       n         p\\n\",\n       \"   <category> <int64> <float64>\\n\",\n       \"17          w     134     0.134\\n\",\n       \"18          x     128     0.128\\n\",\n       \"20          z     112     0.112\\n\",\n       \"8           n     105     0.105\\n\",\n       \"1           c      88     0.088\\n\",\n       \"14          t      87     0.087\\n\",\n       \"19          y      72     0.072\\n\",\n       \"5           k      67     0.067\\n\",\n       \"15          u      49     0.049\\n\",\n       \"4           i      45     0.045\\n\",\n       \"2           d      37     0.037\\n\",\n       \"12          r      22     0.022\\n\",\n       \"16          v      17     0.017\\n\",\n       \"7           m      14     0.014\\n\",\n       \"0           b       8     0.008\\n\",\n       \"11          q       5     0.005\\n\",\n       \"9           o       4     0.004\\n\",\n       \"6           l       2     0.002\\n\",\n       \"10          p       2     0.002\\n\",\n       \"3           e       1     0.001\\n\",\n       \"13          s       1     0.001\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_count(fct, sort = TRUE, prop = TRUE)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_match\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>False</th>\\n\",\n       \"      <th>True</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>7983</td>\\n\",\n       \"      <td>13500</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        False   True \\n\",\n       \"      <int64> <int64>\\n\",\n       \"count    7983   13500\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table(fct_match(gss_cat.marital, c(\\\"Married\\\", \\\"Divorced\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>False</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>count</th>\\n\",\n       \"      <td>21483</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        False\\n\",\n       \"      <int64>\\n\",\n       \"count   21483\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table(numpy.isin(gss_cat.marital, c(\\\"Maried\\\", \\\"Davorced\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] Levels not present in factor: ['Maried' 'Davorced'].\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    table(fct_match(gss_cat.marital, c(\\\"Maried\\\", \\\"Davorced\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## fct_unique\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['p', 'k', 'i', 'j', 'e', 'r', 'm', 'g', 'n', 'f', 'o', 'h', 'l',\\n\",\n       \"       'd', 'c'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct = factor(letters[rpois(100, 10)-1])\\n\",\n    \"\\n\",\n    \"unique(fct)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['c', 'd', 'e', 'f', 'g', ..., 'm', 'n', 'o', 'p', 'r']\\n\",\n       \"Length: 15\\n\",\n       \"Categories (15, object): ['c', 'd', 'e', 'f', ..., 'n', 'o', 'p', 'r']\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct_unique(fct)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## lvls_reorder, lvls_revalue and lvls_expand\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b', 'c']\\n\",\n       \"Categories (3, object): ['c', 'b', 'a']\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fct = factor(c(\\\"a\\\", \\\"b\\\", \\\"c\\\"))\\n\",\n    \"lvls_reorder(fct, [2,1,0])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['apple', 'banana', 'carrot']\\n\",\n       \"Categories (3, object): ['apple', 'banana', 'carrot']\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lvls_revalue(fct, c(\\\"apple\\\", \\\"banana\\\", \\\"carrot\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b', 'c']\\n\",\n       \"Categories (4, object): ['a', 'b', 'c', 'd']\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lvls_expand(fct, c(\\\"a\\\", \\\"b\\\", \\\"c\\\", \\\"d\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## lvls_union\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array(['a', 'b'], dtype=object)\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fs = [factor(\\\"a\\\"), factor(\\\"b\\\"), factor(c(\\\"a\\\", \\\"b\\\"))]\\n\",\n    \"lvls_union(fs)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"orig_nbformat\": 4,\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/full_seq.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"occasional-onion\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:58.337680Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:58.336855Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.226466Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.226860Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Ffull_seq.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ full_seq</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Create the full sequence of values in a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector.  \\n\",\n       \"&emsp;&emsp;`period`: Gap between each observation. The existing data will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;checked to ensure that it is actually of this periodicity.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`tol`: Numerical tolerance for checking periodicity.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The full sequence  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/full_seq.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(full_seq)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"convenient-professional\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:59.233189Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:59.232551Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:59.245528Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:59.246036Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"full_seq(c(1, 2, 4, 5, 10), 1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"ad52e92c\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/group_by.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:13.703680Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:13.701440Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:14.914697Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:14.915141Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fgroup_by.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ group_by</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Create a grouped frame\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/group_by.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: A variable or function of variables to group by.  \\n\",\n       \"&emsp;&emsp;`_add`: If `True`, add grouping variables to an existing group.  \\n\",\n       \"&emsp;&emsp;`_drop`: If `True`, drop grouping variables from the output.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A grouped frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ ungroup</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Remove grouping variables\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/ungroup.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A grouped frame  \\n\",\n       \"&emsp;&emsp;`*cols`: Columns to remove grouping variables from.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/group_by.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(group_by, ungroup)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:14.976182Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:14.975600Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.004416Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.004970Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"1       21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"2       22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"3       21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"4       18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"5       18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"6       14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"7       24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"8       22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"9       19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"10      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"11      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"12      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"13      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"14      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"15      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"16      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"17      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"18      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"19      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"20      21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"21      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"22      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"23      13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"24      19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"25      27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"26      26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"27      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"28      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"29      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"30      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"31      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        1       4       4  \\n\",\n       \"1        1       4       4  \\n\",\n       \"2        1       4       1  \\n\",\n       \"3        0       3       1  \\n\",\n       \"4        0       3       2  \\n\",\n       \"5        0       3       1  \\n\",\n       \"6        0       3       4  \\n\",\n       \"7        0       4       2  \\n\",\n       \"8        0       4       2  \\n\",\n       \"9        0       4       4  \\n\",\n       \"10       0       4       4  \\n\",\n       \"11       0       3       3  \\n\",\n       \"12       0       3       3  \\n\",\n       \"13       0       3       3  \\n\",\n       \"14       0       3       4  \\n\",\n       \"15       0       3       4  \\n\",\n       \"16       0       3       4  \\n\",\n       \"17       1       4       1  \\n\",\n       \"18       1       4       2  \\n\",\n       \"19       1       4       1  \\n\",\n       \"20       0       3       1  \\n\",\n       \"21       0       3       2  \\n\",\n       \"22       0       3       2  \\n\",\n       \"23       0       3       4  \\n\",\n       \"24       0       3       2  \\n\",\n       \"25       1       4       1  \\n\",\n       \"26       1       5       2  \\n\",\n       \"27       1       5       2  \\n\",\n       \"28       1       5       4  \\n\",\n       \"29       1       5       6  \\n\",\n       \"30       1       5       8  \\n\",\n       \"31       1       4       2  \\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl = mtcars >> group_by(f.cyl) \\n\",\n    \"by_cyl\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.017114Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.016495Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.049093Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.049650Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['cyl']\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> group_vars()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.132668Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.132114Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.177747Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.178134Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>183.314286</td>\\n\",\n       \"      <td>122.285714</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>105.136364</td>\\n\",\n       \"      <td>82.636364</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>353.100000</td>\\n\",\n       \"      <td>209.214286</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      cyl        disp          hp\\n\",\n       \"  <int64>   <float64>   <float64>\\n\",\n       \"0       6  183.314286  122.285714\\n\",\n       \"1       4  105.136364   82.636364\\n\",\n       \"2       8  353.100000  209.214286\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> summarise(\\n\",\n    \"  disp = mean(f.disp),\\n\",\n    \"  hp = mean(f.hp)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.229676Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.229126Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.281912Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.282358Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>183.314286</td>\\n\",\n       \"      <td>122.285714</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>105.136364</td>\\n\",\n       \"      <td>82.636364</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>353.100000</td>\\n\",\n       \"      <td>209.214286</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      cyl        disp          hp\\n\",\n       \"  <int64>   <float64>   <float64>\\n\",\n       \"0       6  183.314286  122.285714\\n\",\n       \"1       4  105.136364   82.636364\\n\",\n       \"2       8  353.100000  209.214286\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> summarise(\\n\",\n    \"  disp = f.disp.mean(),\\n\",\n    \"  hp = f.hp.mean()\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.443180Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.442440Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.529983Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.530485Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"        mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"  <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0      21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"1      24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"2      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"\\n\",\n       \"       am    gear    carb  \\n\",\n       \"  <int64> <int64> <int64>  \\n\",\n       \"0       0       3       1  \\n\",\n       \"1       0       4       2  \\n\",\n       \"2       0       3       4  \\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> filter(f.disp == max(f.disp))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.614261Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.613607Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.648443Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.648848Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:03:28][datar][   INFO] `summarise()` has grouped output by ['vs'] (override with `_groups` argument)\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: vs (n=2)\"\n      ],\n      \"text/plain\": [\n       \"       vs      am       n\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       0       1       6\\n\",\n       \"1       1       1       7\\n\",\n       \"2       1       0       7\\n\",\n       \"3       0       0      12\\n\",\n       \"[TibbleGrouped: vs (n=2)]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_vs_am = mtcars >> group_by(f.vs, f.am)\\n\",\n    \"by_vs = by_vs_am >> summarise(n=n())\\n\",\n    \"by_vs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.669009Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.668452Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.690146Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.690536Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       vs       n\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       0      18\\n\",\n       \"1       1      14\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_vs >> summarise(n=sum(f.n))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.710665Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.710003Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.738089Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.738657Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>32</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        n\\n\",\n       \"  <int64>\\n\",\n       \"0      32\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_vs >> \\\\\\n\",\n    \"  ungroup() >> \\\\\\n\",\n    \"  summarise(n = sum(f.n))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.786635Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.785325Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.800853Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.801238Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"      <th>vsam</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: vsam (n=3)\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"1       21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"2       22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"3       21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"4       18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"5       18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"6       14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"7       24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"8       22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"9       19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"10      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"11      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"12      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"13      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"14      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"15      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"16      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"17      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"18      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"19      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"20      21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"21      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"22      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"23      13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"24      19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"25      27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"26      26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"27      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"28      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"29      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"30      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"31      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb    vsam  \\n\",\n       \"   <int64> <int64> <int64> <int64>  \\n\",\n       \"0        1       4       4       1  \\n\",\n       \"1        1       4       4       1  \\n\",\n       \"2        1       4       1       2  \\n\",\n       \"3        0       3       1       1  \\n\",\n       \"4        0       3       2       0  \\n\",\n       \"5        0       3       1       1  \\n\",\n       \"6        0       3       4       0  \\n\",\n       \"7        0       4       2       1  \\n\",\n       \"8        0       4       2       1  \\n\",\n       \"9        0       4       4       1  \\n\",\n       \"10       0       4       4       1  \\n\",\n       \"11       0       3       3       0  \\n\",\n       \"12       0       3       3       0  \\n\",\n       \"13       0       3       3       0  \\n\",\n       \"14       0       3       4       0  \\n\",\n       \"15       0       3       4       0  \\n\",\n       \"16       0       3       4       0  \\n\",\n       \"17       1       4       1       2  \\n\",\n       \"18       1       4       2       2  \\n\",\n       \"19       1       4       1       2  \\n\",\n       \"20       0       3       1       1  \\n\",\n       \"21       0       3       2       0  \\n\",\n       \"22       0       3       2       0  \\n\",\n       \"23       0       3       4       0  \\n\",\n       \"24       0       3       2       0  \\n\",\n       \"25       1       4       1       2  \\n\",\n       \"26       1       5       2       1  \\n\",\n       \"27       1       5       2       2  \\n\",\n       \"28       1       5       4       1  \\n\",\n       \"29       1       5       6       1  \\n\",\n       \"30       1       5       8       1  \\n\",\n       \"31       1       4       2       2  \\n\",\n       \"[TibbleGrouped: vsam (n=3)]\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars_vsam = mtcars >> group_by(vsam=f.vs + f.am) \\n\",\n    \"mtcars_vsam \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.816915Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.816370Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.831042Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.831483Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['vs', 'am']\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> \\\\\\n\",\n    \"  group_by(f.vs, f.am) >> \\\\\\n\",\n    \"  group_vars()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.852030Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.851473Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.897903Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.898295Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['cyl', 'vs', 'am']\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"by_cyl >> \\\\\\n\",\n    \"  group_by(f.vs, f.am, _add=True) >> \\\\\\n\",\n    \"  group_vars()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/group_map.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"57a3cb89\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.978059Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.977453Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.260200Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.260642Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fgroup_map.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ group_map</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Apply a function to each group\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/group_map.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A grouped frame  \\n\",\n       \"&emsp;&emsp;`_f`: A function to apply to each group.  \\n\",\n       \"&emsp;&emsp;`*args`: Additional arguments to pass to `func`.  \\n\",\n       \"&emsp;&emsp;`_keep`: If `True`, keep the grouping variables in the output.  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Additional keyword arguments to pass to `func`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A list of results  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/group_map.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars, iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(group_map)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"8dae4674\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.269961Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.269298Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.374049Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.374622Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[        mpg      disp      hp      drat  ...      vs      am    gear    carb\\n\",\n       \"   <float64> <float64> <int64> <float64>  ... <int64> <int64> <int64> <int64>\\n\",\n       \" 0      21.0     160.0     110       3.9  ...       0       1       4       4\\n\",\n       \" 1      21.0     160.0     110       3.9            0       1       4       4\\n\",\n       \" \\n\",\n       \" [2 rows x 10 columns],\\n\",\n       \"         mpg      disp      hp      drat  ...      vs      am    gear    carb\\n\",\n       \"   <float64> <float64> <int64> <float64>  ... <int64> <int64> <int64> <int64>\\n\",\n       \" 0      22.8     108.0      93      3.85  ...       1       1       4       1\\n\",\n       \" 1      24.4     146.7      62      3.69            1       0       4       2\\n\",\n       \" \\n\",\n       \" [2 rows x 10 columns],\\n\",\n       \"         mpg      disp      hp      drat  ...      vs      am    gear    carb\\n\",\n       \"   <float64> <float64> <int64> <float64>  ... <int64> <int64> <int64> <int64>\\n\",\n       \" 0      18.7     360.0     175      3.15  ...       0       0       3       2\\n\",\n       \" 1      14.3     360.0     245      3.21            0       0       3       4\\n\",\n       \" \\n\",\n       \" [2 rows x 10 columns]]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"list(\\n\",\n    \"  mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl) >> \\\\\\n\",\n    \"  group_map(lambda df: df >> head(2))\\n\",\n    \")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"3dd99448\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.471163Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.469789Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.656298Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.656823Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"      cyl       mpg      disp      hp  ...      vs      am    gear    carb\\n\",\n       \"  <int64> <float64> <float64> <int64>  ... <int64> <int64> <int64> <int64>\\n\",\n       \"0       6      21.0     160.0     110  ...       0       1       4       4\\n\",\n       \"1       6      21.0     160.0     110  ...       0       1       4       4\\n\",\n       \"0       4      22.8     108.0      93  ...       1       1       4       1\\n\",\n       \"1       4      24.4     146.7      62  ...       1       0       4       2\\n\",\n       \"0       8      18.7     360.0     175  ...       0       0       3       2\\n\",\n       \"1       8      14.3     360.0     245            0       0       3       4\\n\",\n       \"\\n\",\n       \"[6 rows x 11 columns]\\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"\\n\",\n    \"mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl) >> \\\\\\n\",\n    \"  group_modify(lambda df: df >> head(2))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"9713979f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.705307Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.704323Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.736655Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.733142Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[array([1.4  , 1.5  , 1.575]),\\n\",\n       \" array([4.  , 4.35, 4.6 ]),\\n\",\n       \" array([5.1  , 5.55 , 5.875])]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"list(\\n\",\n    \"  iris >> \\\\\\n\",\n    \"  group_by(f.Species) >> \\\\\\n\",\n    \"  group_map(lambda df: quantile(df['Petal_Length'], probs=c(0.25, 0.5, 0.75)))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"f1da70a0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.775636Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.774540Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.786685Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.787352Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"(50, 4)\\n\",\n      \"(50, 4)\\n\",\n      \"(50, 4)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"iris >> \\\\\\n\",\n    \"  group_by(f.Species) >> \\\\\\n\",\n    \"  group_walk(lambda df: print(df.shape))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"fe130860\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.821207Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.820364Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.836773Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.837212Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    mpg     cyl      disp  ...      am    gear    carb\\n\",\n       \"              <float64> <int64> <float64>  ... <int64> <int64> <int64>\\n\",\n       \"Mazda RX4          21.0       6     160.0  ...       1       4       4\\n\",\n       \"Mazda RX4 Wag      21.0       6     160.0            1       4       4\\n\",\n       \"\\n\",\n       \"[2 rows x 11 columns]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> \\\\\\n\",\n    \"  group_modify(lambda df: df >> head(2))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"af50d40c\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/group_split.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"47292892\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:52.255547Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:52.254748Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.206679Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.207313Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fgroup_split.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ group_split</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Split a grouped frame into a list of data frames\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/group_split.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A grouped frame  \\n\",\n       \"&emsp;&emsp;`*args`: Additional arguments to pass to `func`.  \\n\",\n       \"&emsp;&emsp;`_keep`: If `True`, keep the grouping variables in the output.  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Additional keyword arguments to pass to `func`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A list of data frames  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/group_split.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(group_split)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"a2008be0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.213365Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.212184Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.288326Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.287655Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width  Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64> <object>\\n\",\n       \" 0            5.1          3.5           1.4          0.2   setosa\\n\",\n       \" 1            4.9          3.0           1.4          0.2   setosa\\n\",\n       \" 2            4.7          3.2           1.3          0.2   setosa\\n\",\n       \" 3            4.6          3.1           1.5          0.2   setosa\\n\",\n       \" 4            5.0          3.6           1.4          0.2   setosa\\n\",\n       \" 5            5.4          3.9           1.7          0.4   setosa\\n\",\n       \" 6            4.6          3.4           1.4          0.3   setosa\\n\",\n       \" 7            5.0          3.4           1.5          0.2   setosa\\n\",\n       \" 8            4.4          2.9           1.4          0.2   setosa\\n\",\n       \" 9            4.9          3.1           1.5          0.1   setosa\\n\",\n       \" 10           5.4          3.7           1.5          0.2   setosa\\n\",\n       \" 11           4.8          3.4           1.6          0.2   setosa\\n\",\n       \" 12           4.8          3.0           1.4          0.1   setosa\\n\",\n       \" 13           4.3          3.0           1.1          0.1   setosa\\n\",\n       \" 14           5.8          4.0           1.2          0.2   setosa\\n\",\n       \" 15           5.7          4.4           1.5          0.4   setosa\\n\",\n       \" 16           5.4          3.9           1.3          0.4   setosa\\n\",\n       \" 17           5.1          3.5           1.4          0.3   setosa\\n\",\n       \" 18           5.7          3.8           1.7          0.3   setosa\\n\",\n       \" 19           5.1          3.8           1.5          0.3   setosa\\n\",\n       \" 20           5.4          3.4           1.7          0.2   setosa\\n\",\n       \" 21           5.1          3.7           1.5          0.4   setosa\\n\",\n       \" 22           4.6          3.6           1.0          0.2   setosa\\n\",\n       \" 23           5.1          3.3           1.7          0.5   setosa\\n\",\n       \" 24           4.8          3.4           1.9          0.2   setosa\\n\",\n       \" 25           5.0          3.0           1.6          0.2   setosa\\n\",\n       \" 26           5.0          3.4           1.6          0.4   setosa\\n\",\n       \" 27           5.2          3.5           1.5          0.2   setosa\\n\",\n       \" 28           5.2          3.4           1.4          0.2   setosa\\n\",\n       \" 29           4.7          3.2           1.6          0.2   setosa\\n\",\n       \" 30           4.8          3.1           1.6          0.2   setosa\\n\",\n       \" 31           5.4          3.4           1.5          0.4   setosa\\n\",\n       \" 32           5.2          4.1           1.5          0.1   setosa\\n\",\n       \" 33           5.5          4.2           1.4          0.2   setosa\\n\",\n       \" 34           4.9          3.1           1.5          0.2   setosa\\n\",\n       \" 35           5.0          3.2           1.2          0.2   setosa\\n\",\n       \" 36           5.5          3.5           1.3          0.2   setosa\\n\",\n       \" 37           4.9          3.6           1.4          0.1   setosa\\n\",\n       \" 38           4.4          3.0           1.3          0.2   setosa\\n\",\n       \" 39           5.1          3.4           1.5          0.2   setosa\\n\",\n       \" 40           5.0          3.5           1.3          0.3   setosa\\n\",\n       \" 41           4.5          2.3           1.3          0.3   setosa\\n\",\n       \" 42           4.4          3.2           1.3          0.2   setosa\\n\",\n       \" 43           5.0          3.5           1.6          0.6   setosa\\n\",\n       \" 44           5.1          3.8           1.9          0.4   setosa\\n\",\n       \" 45           4.8          3.0           1.4          0.3   setosa\\n\",\n       \" 46           5.1          3.8           1.6          0.2   setosa\\n\",\n       \" 47           4.6          3.2           1.4          0.2   setosa\\n\",\n       \" 48           5.3          3.7           1.5          0.2   setosa\\n\",\n       \" 49           5.0          3.3           1.4          0.2   setosa,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width     Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>    <object>\\n\",\n       \" 0            7.0          3.2           4.7          1.4  versicolor\\n\",\n       \" 1            6.4          3.2           4.5          1.5  versicolor\\n\",\n       \" 2            6.9          3.1           4.9          1.5  versicolor\\n\",\n       \" 3            5.5          2.3           4.0          1.3  versicolor\\n\",\n       \" 4            6.5          2.8           4.6          1.5  versicolor\\n\",\n       \" 5            5.7          2.8           4.5          1.3  versicolor\\n\",\n       \" 6            6.3          3.3           4.7          1.6  versicolor\\n\",\n       \" 7            4.9          2.4           3.3          1.0  versicolor\\n\",\n       \" 8            6.6          2.9           4.6          1.3  versicolor\\n\",\n       \" 9            5.2          2.7           3.9          1.4  versicolor\\n\",\n       \" 10           5.0          2.0           3.5          1.0  versicolor\\n\",\n       \" 11           5.9          3.0           4.2          1.5  versicolor\\n\",\n       \" 12           6.0          2.2           4.0          1.0  versicolor\\n\",\n       \" 13           6.1          2.9           4.7          1.4  versicolor\\n\",\n       \" 14           5.6          2.9           3.6          1.3  versicolor\\n\",\n       \" 15           6.7          3.1           4.4          1.4  versicolor\\n\",\n       \" 16           5.6          3.0           4.5          1.5  versicolor\\n\",\n       \" 17           5.8          2.7           4.1          1.0  versicolor\\n\",\n       \" 18           6.2          2.2           4.5          1.5  versicolor\\n\",\n       \" 19           5.6          2.5           3.9          1.1  versicolor\\n\",\n       \" 20           5.9          3.2           4.8          1.8  versicolor\\n\",\n       \" 21           6.1          2.8           4.0          1.3  versicolor\\n\",\n       \" 22           6.3          2.5           4.9          1.5  versicolor\\n\",\n       \" 23           6.1          2.8           4.7          1.2  versicolor\\n\",\n       \" 24           6.4          2.9           4.3          1.3  versicolor\\n\",\n       \" 25           6.6          3.0           4.4          1.4  versicolor\\n\",\n       \" 26           6.8          2.8           4.8          1.4  versicolor\\n\",\n       \" 27           6.7          3.0           5.0          1.7  versicolor\\n\",\n       \" 28           6.0          2.9           4.5          1.5  versicolor\\n\",\n       \" 29           5.7          2.6           3.5          1.0  versicolor\\n\",\n       \" 30           5.5          2.4           3.8          1.1  versicolor\\n\",\n       \" 31           5.5          2.4           3.7          1.0  versicolor\\n\",\n       \" 32           5.8          2.7           3.9          1.2  versicolor\\n\",\n       \" 33           6.0          2.7           5.1          1.6  versicolor\\n\",\n       \" 34           5.4          3.0           4.5          1.5  versicolor\\n\",\n       \" 35           6.0          3.4           4.5          1.6  versicolor\\n\",\n       \" 36           6.7          3.1           4.7          1.5  versicolor\\n\",\n       \" 37           6.3          2.3           4.4          1.3  versicolor\\n\",\n       \" 38           5.6          3.0           4.1          1.3  versicolor\\n\",\n       \" 39           5.5          2.5           4.0          1.3  versicolor\\n\",\n       \" 40           5.5          2.6           4.4          1.2  versicolor\\n\",\n       \" 41           6.1          3.0           4.6          1.4  versicolor\\n\",\n       \" 42           5.8          2.6           4.0          1.2  versicolor\\n\",\n       \" 43           5.0          2.3           3.3          1.0  versicolor\\n\",\n       \" 44           5.6          2.7           4.2          1.3  versicolor\\n\",\n       \" 45           5.7          3.0           4.2          1.2  versicolor\\n\",\n       \" 46           5.7          2.9           4.2          1.3  versicolor\\n\",\n       \" 47           6.2          2.9           4.3          1.3  versicolor\\n\",\n       \" 48           5.1          2.5           3.0          1.1  versicolor\\n\",\n       \" 49           5.7          2.8           4.1          1.3  versicolor,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \" 0            6.3          3.3           6.0          2.5  virginica\\n\",\n       \" 1            5.8          2.7           5.1          1.9  virginica\\n\",\n       \" 2            7.1          3.0           5.9          2.1  virginica\\n\",\n       \" 3            6.3          2.9           5.6          1.8  virginica\\n\",\n       \" 4            6.5          3.0           5.8          2.2  virginica\\n\",\n       \" 5            7.6          3.0           6.6          2.1  virginica\\n\",\n       \" 6            4.9          2.5           4.5          1.7  virginica\\n\",\n       \" 7            7.3          2.9           6.3          1.8  virginica\\n\",\n       \" 8            6.7          2.5           5.8          1.8  virginica\\n\",\n       \" 9            7.2          3.6           6.1          2.5  virginica\\n\",\n       \" 10           6.5          3.2           5.1          2.0  virginica\\n\",\n       \" 11           6.4          2.7           5.3          1.9  virginica\\n\",\n       \" 12           6.8          3.0           5.5          2.1  virginica\\n\",\n       \" 13           5.7          2.5           5.0          2.0  virginica\\n\",\n       \" 14           5.8          2.8           5.1          2.4  virginica\\n\",\n       \" 15           6.4          3.2           5.3          2.3  virginica\\n\",\n       \" 16           6.5          3.0           5.5          1.8  virginica\\n\",\n       \" 17           7.7          3.8           6.7          2.2  virginica\\n\",\n       \" 18           7.7          2.6           6.9          2.3  virginica\\n\",\n       \" 19           6.0          2.2           5.0          1.5  virginica\\n\",\n       \" 20           6.9          3.2           5.7          2.3  virginica\\n\",\n       \" 21           5.6          2.8           4.9          2.0  virginica\\n\",\n       \" 22           7.7          2.8           6.7          2.0  virginica\\n\",\n       \" 23           6.3          2.7           4.9          1.8  virginica\\n\",\n       \" 24           6.7          3.3           5.7          2.1  virginica\\n\",\n       \" 25           7.2          3.2           6.0          1.8  virginica\\n\",\n       \" 26           6.2          2.8           4.8          1.8  virginica\\n\",\n       \" 27           6.1          3.0           4.9          1.8  virginica\\n\",\n       \" 28           6.4          2.8           5.6          2.1  virginica\\n\",\n       \" 29           7.2          3.0           5.8          1.6  virginica\\n\",\n       \" 30           7.4          2.8           6.1          1.9  virginica\\n\",\n       \" 31           7.9          3.8           6.4          2.0  virginica\\n\",\n       \" 32           6.4          2.8           5.6          2.2  virginica\\n\",\n       \" 33           6.3          2.8           5.1          1.5  virginica\\n\",\n       \" 34           6.1          2.6           5.6          1.4  virginica\\n\",\n       \" 35           7.7          3.0           6.1          2.3  virginica\\n\",\n       \" 36           6.3          3.4           5.6          2.4  virginica\\n\",\n       \" 37           6.4          3.1           5.5          1.8  virginica\\n\",\n       \" 38           6.0          3.0           4.8          1.8  virginica\\n\",\n       \" 39           6.9          3.1           5.4          2.1  virginica\\n\",\n       \" 40           6.7          3.1           5.6          2.4  virginica\\n\",\n       \" 41           6.9          3.1           5.1          2.3  virginica\\n\",\n       \" 42           5.8          2.7           5.1          1.9  virginica\\n\",\n       \" 43           6.8          3.2           5.9          2.3  virginica\\n\",\n       \" 44           6.7          3.3           5.7          2.5  virginica\\n\",\n       \" 45           6.7          3.0           5.2          2.3  virginica\\n\",\n       \" 46           6.3          2.5           5.0          1.9  virginica\\n\",\n       \" 47           6.5          3.0           5.2          2.0  virginica\\n\",\n       \" 48           6.2          3.4           5.4          2.3  virginica\\n\",\n       \" 49           5.9          3.0           5.1          1.8  virginica]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"ir = iris >> group_by(f.Species)\\n\",\n    \"\\n\",\n    \"list(group_split(ir))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"3ec457eb\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.300912Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.300148Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.304391Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.303877Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species\\n\",\n       \"     <object>\\n\",\n       \"0      setosa\\n\",\n       \"1  versicolor\\n\",\n       \"2   virginica\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"group_keys(ir)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"495b5d8c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.320666Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.320074Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.451293Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.450611Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width  Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64> <object>\\n\",\n       \" 0            5.1          3.5           1.4          0.2   setosa\\n\",\n       \" 1            5.4          3.9           1.7          0.4   setosa\\n\",\n       \" 2            5.4          3.7           1.5          0.2   setosa\\n\",\n       \" 3            5.8          4.0           1.2          0.2   setosa\\n\",\n       \" 4            5.7          4.4           1.5          0.4   setosa\\n\",\n       \" 5            5.4          3.9           1.3          0.4   setosa\\n\",\n       \" 6            5.1          3.5           1.4          0.3   setosa\\n\",\n       \" 7            5.7          3.8           1.7          0.3   setosa\\n\",\n       \" 8            5.1          3.8           1.5          0.3   setosa\\n\",\n       \" 9            5.4          3.4           1.7          0.2   setosa\\n\",\n       \" 10           5.1          3.7           1.5          0.4   setosa\\n\",\n       \" 11           5.1          3.3           1.7          0.5   setosa\\n\",\n       \" 12           5.2          3.5           1.5          0.2   setosa\\n\",\n       \" 13           5.2          3.4           1.4          0.2   setosa\\n\",\n       \" 14           5.4          3.4           1.5          0.4   setosa\\n\",\n       \" 15           5.2          4.1           1.5          0.1   setosa\\n\",\n       \" 16           5.5          4.2           1.4          0.2   setosa\\n\",\n       \" 17           5.5          3.5           1.3          0.2   setosa\\n\",\n       \" 18           5.1          3.4           1.5          0.2   setosa\\n\",\n       \" 19           5.1          3.8           1.9          0.4   setosa\\n\",\n       \" 20           5.1          3.8           1.6          0.2   setosa\\n\",\n       \" 21           5.3          3.7           1.5          0.2   setosa,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width     Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>    <object>\\n\",\n       \" 0            7.0          3.2           4.7          1.4  versicolor\\n\",\n       \" 1            6.4          3.2           4.5          1.5  versicolor\\n\",\n       \" 2            6.9          3.1           4.9          1.5  versicolor\\n\",\n       \" 3            6.5          2.8           4.6          1.5  versicolor\\n\",\n       \" 4            6.3          3.3           4.7          1.6  versicolor\\n\",\n       \" 5            6.6          2.9           4.6          1.3  versicolor\\n\",\n       \" 6            6.0          2.2           4.0          1.0  versicolor\\n\",\n       \" 7            6.1          2.9           4.7          1.4  versicolor\\n\",\n       \" 8            6.7          3.1           4.4          1.4  versicolor\\n\",\n       \" 9            6.2          2.2           4.5          1.5  versicolor\\n\",\n       \" 10           6.1          2.8           4.0          1.3  versicolor\\n\",\n       \" 11           6.3          2.5           4.9          1.5  versicolor\\n\",\n       \" 12           6.1          2.8           4.7          1.2  versicolor\\n\",\n       \" 13           6.4          2.9           4.3          1.3  versicolor\\n\",\n       \" 14           6.6          3.0           4.4          1.4  versicolor\\n\",\n       \" 15           6.8          2.8           4.8          1.4  versicolor\\n\",\n       \" 16           6.7          3.0           5.0          1.7  versicolor\\n\",\n       \" 17           6.0          2.9           4.5          1.5  versicolor\\n\",\n       \" 18           6.0          2.7           5.1          1.6  versicolor\\n\",\n       \" 19           6.0          3.4           4.5          1.6  versicolor\\n\",\n       \" 20           6.7          3.1           4.7          1.5  versicolor\\n\",\n       \" 21           6.3          2.3           4.4          1.3  versicolor\\n\",\n       \" 22           6.1          3.0           4.6          1.4  versicolor\\n\",\n       \" 23           6.2          2.9           4.3          1.3  versicolor,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \" 0            7.1          3.0           5.9          2.1  virginica\\n\",\n       \" 1            7.6          3.0           6.6          2.1  virginica\\n\",\n       \" 2            7.3          2.9           6.3          1.8  virginica\\n\",\n       \" 3            6.7          2.5           5.8          1.8  virginica\\n\",\n       \" 4            7.2          3.6           6.1          2.5  virginica\\n\",\n       \" 5            6.8          3.0           5.5          2.1  virginica\\n\",\n       \" 6            7.7          3.8           6.7          2.2  virginica\\n\",\n       \" 7            7.7          2.6           6.9          2.3  virginica\\n\",\n       \" 8            6.9          3.2           5.7          2.3  virginica\\n\",\n       \" 9            7.7          2.8           6.7          2.0  virginica\\n\",\n       \" 10           6.7          3.3           5.7          2.1  virginica\\n\",\n       \" 11           7.2          3.2           6.0          1.8  virginica\\n\",\n       \" 12           7.2          3.0           5.8          1.6  virginica\\n\",\n       \" 13           7.4          2.8           6.1          1.9  virginica\\n\",\n       \" 14           7.9          3.8           6.4          2.0  virginica\\n\",\n       \" 15           7.7          3.0           6.1          2.3  virginica\\n\",\n       \" 16           6.9          3.1           5.4          2.1  virginica\\n\",\n       \" 17           6.7          3.1           5.6          2.4  virginica\\n\",\n       \" 18           6.9          3.1           5.1          2.3  virginica\\n\",\n       \" 19           6.8          3.2           5.9          2.3  virginica\\n\",\n       \" 20           6.7          3.3           5.7          2.5  virginica\\n\",\n       \" 21           6.7          3.0           5.2          2.3  virginica]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"ir = iris >> \\\\\\n\",\n    \"  group_by(f.Species) >> \\\\\\n\",\n    \"  filter(f['Sepal_Length'] > mean(f['Sepal_Length']))\\n\",\n    \"list(group_split(ir))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"250034b0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.458909Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.458364Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.461501Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.461898Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species\\n\",\n       \"     <object>\\n\",\n       \"0      setosa\\n\",\n       \"1  versicolor\\n\",\n       \"2   virginica\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"group_keys(ir)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"a9d564a6\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.504622Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.504035Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.507391Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.507943Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width  Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64> <object>\\n\",\n       \" 0            5.1          3.5           1.4          0.2   setosa\\n\",\n       \" 1            4.9          3.0           1.4          0.2   setosa\\n\",\n       \" 2            4.7          3.2           1.3          0.2   setosa\\n\",\n       \" 3            4.6          3.1           1.5          0.2   setosa\\n\",\n       \" 4            5.0          3.6           1.4          0.2   setosa\\n\",\n       \" 5            5.4          3.9           1.7          0.4   setosa\\n\",\n       \" 6            4.6          3.4           1.4          0.3   setosa\\n\",\n       \" 7            5.0          3.4           1.5          0.2   setosa\\n\",\n       \" 8            4.4          2.9           1.4          0.2   setosa\\n\",\n       \" 9            4.9          3.1           1.5          0.1   setosa\\n\",\n       \" 10           5.4          3.7           1.5          0.2   setosa\\n\",\n       \" 11           4.8          3.4           1.6          0.2   setosa\\n\",\n       \" 12           4.8          3.0           1.4          0.1   setosa\\n\",\n       \" 13           4.3          3.0           1.1          0.1   setosa\\n\",\n       \" 14           5.8          4.0           1.2          0.2   setosa\\n\",\n       \" 15           5.7          4.4           1.5          0.4   setosa\\n\",\n       \" 16           5.4          3.9           1.3          0.4   setosa\\n\",\n       \" 17           5.1          3.5           1.4          0.3   setosa\\n\",\n       \" 18           5.7          3.8           1.7          0.3   setosa\\n\",\n       \" 19           5.1          3.8           1.5          0.3   setosa\\n\",\n       \" 20           5.4          3.4           1.7          0.2   setosa\\n\",\n       \" 21           5.1          3.7           1.5          0.4   setosa\\n\",\n       \" 22           4.6          3.6           1.0          0.2   setosa\\n\",\n       \" 23           5.1          3.3           1.7          0.5   setosa\\n\",\n       \" 24           4.8          3.4           1.9          0.2   setosa\\n\",\n       \" 25           5.0          3.0           1.6          0.2   setosa\\n\",\n       \" 26           5.0          3.4           1.6          0.4   setosa\\n\",\n       \" 27           5.2          3.5           1.5          0.2   setosa\\n\",\n       \" 28           5.2          3.4           1.4          0.2   setosa\\n\",\n       \" 29           4.7          3.2           1.6          0.2   setosa\\n\",\n       \" 30           4.8          3.1           1.6          0.2   setosa\\n\",\n       \" 31           5.4          3.4           1.5          0.4   setosa\\n\",\n       \" 32           5.2          4.1           1.5          0.1   setosa\\n\",\n       \" 33           5.5          4.2           1.4          0.2   setosa\\n\",\n       \" 34           4.9          3.1           1.5          0.2   setosa\\n\",\n       \" 35           5.0          3.2           1.2          0.2   setosa\\n\",\n       \" 36           5.5          3.5           1.3          0.2   setosa\\n\",\n       \" 37           4.9          3.6           1.4          0.1   setosa\\n\",\n       \" 38           4.4          3.0           1.3          0.2   setosa\\n\",\n       \" 39           5.1          3.4           1.5          0.2   setosa\\n\",\n       \" 40           5.0          3.5           1.3          0.3   setosa\\n\",\n       \" 41           4.5          2.3           1.3          0.3   setosa\\n\",\n       \" 42           4.4          3.2           1.3          0.2   setosa\\n\",\n       \" 43           5.0          3.5           1.6          0.6   setosa\\n\",\n       \" 44           5.1          3.8           1.9          0.4   setosa\\n\",\n       \" 45           4.8          3.0           1.4          0.3   setosa\\n\",\n       \" 46           5.1          3.8           1.6          0.2   setosa\\n\",\n       \" 47           4.6          3.2           1.4          0.2   setosa\\n\",\n       \" 48           5.3          3.7           1.5          0.2   setosa\\n\",\n       \" 49           5.0          3.3           1.4          0.2   setosa,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width     Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>    <object>\\n\",\n       \" 0            7.0          3.2           4.7          1.4  versicolor\\n\",\n       \" 1            6.4          3.2           4.5          1.5  versicolor\\n\",\n       \" 2            6.9          3.1           4.9          1.5  versicolor\\n\",\n       \" 3            5.5          2.3           4.0          1.3  versicolor\\n\",\n       \" 4            6.5          2.8           4.6          1.5  versicolor\\n\",\n       \" 5            5.7          2.8           4.5          1.3  versicolor\\n\",\n       \" 6            6.3          3.3           4.7          1.6  versicolor\\n\",\n       \" 7            4.9          2.4           3.3          1.0  versicolor\\n\",\n       \" 8            6.6          2.9           4.6          1.3  versicolor\\n\",\n       \" 9            5.2          2.7           3.9          1.4  versicolor\\n\",\n       \" 10           5.0          2.0           3.5          1.0  versicolor\\n\",\n       \" 11           5.9          3.0           4.2          1.5  versicolor\\n\",\n       \" 12           6.0          2.2           4.0          1.0  versicolor\\n\",\n       \" 13           6.1          2.9           4.7          1.4  versicolor\\n\",\n       \" 14           5.6          2.9           3.6          1.3  versicolor\\n\",\n       \" 15           6.7          3.1           4.4          1.4  versicolor\\n\",\n       \" 16           5.6          3.0           4.5          1.5  versicolor\\n\",\n       \" 17           5.8          2.7           4.1          1.0  versicolor\\n\",\n       \" 18           6.2          2.2           4.5          1.5  versicolor\\n\",\n       \" 19           5.6          2.5           3.9          1.1  versicolor\\n\",\n       \" 20           5.9          3.2           4.8          1.8  versicolor\\n\",\n       \" 21           6.1          2.8           4.0          1.3  versicolor\\n\",\n       \" 22           6.3          2.5           4.9          1.5  versicolor\\n\",\n       \" 23           6.1          2.8           4.7          1.2  versicolor\\n\",\n       \" 24           6.4          2.9           4.3          1.3  versicolor\\n\",\n       \" 25           6.6          3.0           4.4          1.4  versicolor\\n\",\n       \" 26           6.8          2.8           4.8          1.4  versicolor\\n\",\n       \" 27           6.7          3.0           5.0          1.7  versicolor\\n\",\n       \" 28           6.0          2.9           4.5          1.5  versicolor\\n\",\n       \" 29           5.7          2.6           3.5          1.0  versicolor\\n\",\n       \" 30           5.5          2.4           3.8          1.1  versicolor\\n\",\n       \" 31           5.5          2.4           3.7          1.0  versicolor\\n\",\n       \" 32           5.8          2.7           3.9          1.2  versicolor\\n\",\n       \" 33           6.0          2.7           5.1          1.6  versicolor\\n\",\n       \" 34           5.4          3.0           4.5          1.5  versicolor\\n\",\n       \" 35           6.0          3.4           4.5          1.6  versicolor\\n\",\n       \" 36           6.7          3.1           4.7          1.5  versicolor\\n\",\n       \" 37           6.3          2.3           4.4          1.3  versicolor\\n\",\n       \" 38           5.6          3.0           4.1          1.3  versicolor\\n\",\n       \" 39           5.5          2.5           4.0          1.3  versicolor\\n\",\n       \" 40           5.5          2.6           4.4          1.2  versicolor\\n\",\n       \" 41           6.1          3.0           4.6          1.4  versicolor\\n\",\n       \" 42           5.8          2.6           4.0          1.2  versicolor\\n\",\n       \" 43           5.0          2.3           3.3          1.0  versicolor\\n\",\n       \" 44           5.6          2.7           4.2          1.3  versicolor\\n\",\n       \" 45           5.7          3.0           4.2          1.2  versicolor\\n\",\n       \" 46           5.7          2.9           4.2          1.3  versicolor\\n\",\n       \" 47           6.2          2.9           4.3          1.3  versicolor\\n\",\n       \" 48           5.1          2.5           3.0          1.1  versicolor\\n\",\n       \" 49           5.7          2.8           4.1          1.3  versicolor,\\n\",\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \" 0            6.3          3.3           6.0          2.5  virginica\\n\",\n       \" 1            5.8          2.7           5.1          1.9  virginica\\n\",\n       \" 2            7.1          3.0           5.9          2.1  virginica\\n\",\n       \" 3            6.3          2.9           5.6          1.8  virginica\\n\",\n       \" 4            6.5          3.0           5.8          2.2  virginica\\n\",\n       \" 5            7.6          3.0           6.6          2.1  virginica\\n\",\n       \" 6            4.9          2.5           4.5          1.7  virginica\\n\",\n       \" 7            7.3          2.9           6.3          1.8  virginica\\n\",\n       \" 8            6.7          2.5           5.8          1.8  virginica\\n\",\n       \" 9            7.2          3.6           6.1          2.5  virginica\\n\",\n       \" 10           6.5          3.2           5.1          2.0  virginica\\n\",\n       \" 11           6.4          2.7           5.3          1.9  virginica\\n\",\n       \" 12           6.8          3.0           5.5          2.1  virginica\\n\",\n       \" 13           5.7          2.5           5.0          2.0  virginica\\n\",\n       \" 14           5.8          2.8           5.1          2.4  virginica\\n\",\n       \" 15           6.4          3.2           5.3          2.3  virginica\\n\",\n       \" 16           6.5          3.0           5.5          1.8  virginica\\n\",\n       \" 17           7.7          3.8           6.7          2.2  virginica\\n\",\n       \" 18           7.7          2.6           6.9          2.3  virginica\\n\",\n       \" 19           6.0          2.2           5.0          1.5  virginica\\n\",\n       \" 20           6.9          3.2           5.7          2.3  virginica\\n\",\n       \" 21           5.6          2.8           4.9          2.0  virginica\\n\",\n       \" 22           7.7          2.8           6.7          2.0  virginica\\n\",\n       \" 23           6.3          2.7           4.9          1.8  virginica\\n\",\n       \" 24           6.7          3.3           5.7          2.1  virginica\\n\",\n       \" 25           7.2          3.2           6.0          1.8  virginica\\n\",\n       \" 26           6.2          2.8           4.8          1.8  virginica\\n\",\n       \" 27           6.1          3.0           4.9          1.8  virginica\\n\",\n       \" 28           6.4          2.8           5.6          2.1  virginica\\n\",\n       \" 29           7.2          3.0           5.8          1.6  virginica\\n\",\n       \" 30           7.4          2.8           6.1          1.9  virginica\\n\",\n       \" 31           7.9          3.8           6.4          2.0  virginica\\n\",\n       \" 32           6.4          2.8           5.6          2.2  virginica\\n\",\n       \" 33           6.3          2.8           5.1          1.5  virginica\\n\",\n       \" 34           6.1          2.6           5.6          1.4  virginica\\n\",\n       \" 35           7.7          3.0           6.1          2.3  virginica\\n\",\n       \" 36           6.3          3.4           5.6          2.4  virginica\\n\",\n       \" 37           6.4          3.1           5.5          1.8  virginica\\n\",\n       \" 38           6.0          3.0           4.8          1.8  virginica\\n\",\n       \" 39           6.9          3.1           5.4          2.1  virginica\\n\",\n       \" 40           6.7          3.1           5.6          2.4  virginica\\n\",\n       \" 41           6.9          3.1           5.1          2.3  virginica\\n\",\n       \" 42           5.8          2.7           5.1          1.9  virginica\\n\",\n       \" 43           6.8          3.2           5.9          2.3  virginica\\n\",\n       \" 44           6.7          3.3           5.7          2.5  virginica\\n\",\n       \" 45           6.7          3.0           5.2          2.3  virginica\\n\",\n       \" 46           6.3          2.5           5.0          1.9  virginica\\n\",\n       \" 47           6.5          3.0           5.2          2.0  virginica\\n\",\n       \" 48           6.2          3.4           5.4          2.3  virginica\\n\",\n       \" 49           5.9          3.0           5.1          1.8  virginica]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"list(iris >> group_split(f.Species))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"ef9086c8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.522213Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.521593Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.526006Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.526356Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species\\n\",\n       \"     <object>\\n\",\n       \"0      setosa\\n\",\n       \"1  versicolor\\n\",\n       \"2   virginica\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# group_keys(...) deprecated in dplyr\\n\",\n    \"iris >> group_by(f.Species) >> group_keys()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"65de8d54\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.549647Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.548678Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.555041Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.555395Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:07:59][datar][WARNING] `_keep` is ignored in `group_split(<TibbleRowwise>)`.\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<generator object group_split_impl at 0x7f4457822190>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"out = iris >> group_by(f.Species) >> group_keys() >> rowwise() >> group_split()\\n\",\n    \"out\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"264e6811\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.567713Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.567079Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.570183Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.570745Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[   Species\\n\",\n       \"   <object>\\n\",\n       \" 0   setosa,\\n\",\n       \"       Species\\n\",\n       \"      <object>\\n\",\n       \" 0  versicolor,\\n\",\n       \"      Species\\n\",\n       \"     <object>\\n\",\n       \" 0  virginica]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"list(out)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"0d64b7b1\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/group_trim.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"9941c94b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:00.630674Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:00.630102Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:01.530300Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:01.530718Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fgroup_trim.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ group_trim</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Remove empty groups\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/group_trim.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A grouped frame  \\n\",\n       \"&emsp;&emsp;`_drop`: See `group_by`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A grouped frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/group_trim.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(group_trim)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"d4c86c45\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:01.592992Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:01.583766Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:01.685184Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:01.684381Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>_rows</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>[0]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>[1]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>[]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           x    _rows\\n\",\n       \"  <category> <object>\\n\",\n       \"0          a      [0]\\n\",\n       \"1          b      [1]\\n\",\n       \"2          c       []\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=factor([\\\"a\\\", \\\"b\\\"], levels=list(\\\"abc\\\")))\\n\",\n    \"df >> group_by(f.x, _drop=False) >> group_data()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"a11f49fc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:01.749108Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:01.742401Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:01.861904Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:01.862322Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>_rows</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>[0]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>[1]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"           x    _rows\\n\",\n       \"  <category> <object>\\n\",\n       \"0          a      [0]\\n\",\n       \"1          b      [1]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> group_by(f.x, _drop=False) >> group_trim() >> group_data()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/lead-lag.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"framed-grill\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.236681Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.235899Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.151393Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.151807Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Flead-lag.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lead</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Shift a vector by `n` positions.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/lead.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`n`: The number of positions to shift.  \\n\",\n       \"&emsp;&emsp;`default`: The default value to use for positions that don't exist.  \\n\",\n       \"&emsp;&emsp;`order_by`: A vector of column names to order by.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ lag</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Shift a vector by `n` positions.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/lag.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`n`: The number of positions to shift.  \\n\",\n       \"&emsp;&emsp;`default`: The default value to use for positions that don't exist.  \\n\",\n       \"&emsp;&emsp;`order_by`: A vector of column names to order by.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/lead-lag.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(lead, lag, book='lead-lag')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"interior-union\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.159285Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.158685Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.162326Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.162843Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    NaN\\n\",\n       \"1    1.0\\n\",\n       \"2    2.0\\n\",\n       \"3    3.0\\n\",\n       \"4    4.0\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = [1,2,3,4,5]\\n\",\n    \"\\n\",\n    \"lag(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"adopted-review\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.170772Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.169913Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.173717Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.174185Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    2.0\\n\",\n       \"1    3.0\\n\",\n       \"2    4.0\\n\",\n       \"3    5.0\\n\",\n       \"4    NaN\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lead(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"precious-generator\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.184680Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.183995Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.679235Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.679737Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>behind</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>ahead</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     behind       x     ahead\\n\",\n       \"  <float64> <int64> <float64>\\n\",\n       \"0       NaN       1       2.0\\n\",\n       \"1       1.0       2       3.0\\n\",\n       \"2       2.0       3       4.0\\n\",\n       \"3       3.0       4       5.0\\n\",\n       \"4       4.0       5       NaN\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(behind=lag(x), x=x, ahead=lead(x))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"associate-heading\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.705380Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.703301Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.715171Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.715814Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    NaN\\n\",\n       \"1    1.0\\n\",\n       \"2    2.0\\n\",\n       \"3    3.0\\n\",\n       \"4    4.0\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lag(x, n=1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"pretty-greeting\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.728204Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.727629Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.740330Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.740767Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    NaN\\n\",\n       \"1    NaN\\n\",\n       \"2    1.0\\n\",\n       \"3    2.0\\n\",\n       \"4    3.0\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lag(x, n=2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"excessive-corrections\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.753161Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.751770Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.765917Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.766714Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    2.0\\n\",\n       \"1    3.0\\n\",\n       \"2    4.0\\n\",\n       \"3    5.0\\n\",\n       \"4    NaN\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lead(x, n=1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"ambient-auckland\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.780643Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.779113Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.792480Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.792914Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    3.0\\n\",\n       \"1    4.0\\n\",\n       \"2    5.0\\n\",\n       \"3    NaN\\n\",\n       \"4    NaN\\n\",\n       \"dtype: float64\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lead(x, n=2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"lined-arnold\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.803720Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.802831Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.810039Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.810456Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    0\\n\",\n       \"1    1\\n\",\n       \"2    2\\n\",\n       \"3    3\\n\",\n       \"4    4\\n\",\n       \"dtype: int64\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lag(x, default=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"academic-directive\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.823358Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.822752Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:16.834898Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:16.835571Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    2\\n\",\n       \"1    3\\n\",\n       \"2    4\\n\",\n       \"3    5\\n\",\n       \"4    6\\n\",\n       \"dtype: int64\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"lead(x, default=6)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"responsible-complement\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.868990Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.868135Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.102872Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.103273Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"      <th>previous_year_value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2000</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2001</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2002</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2003</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2004</td>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2005</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>16.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     year   value  previous_year_value\\n\",\n       \"  <int64> <int64>            <float64>\\n\",\n       \"0    2000       0                  1.0\\n\",\n       \"1    2001       1                  9.0\\n\",\n       \"2    2002       4                  NaN\\n\",\n       \"3    2003       9                  4.0\\n\",\n       \"4    2004      16                  0.0\\n\",\n       \"5    2005      25                 16.0\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"scrambled = slice_sample(\\n\",\n    \"    tibble(year=[2000, 2001, 2002, 2003, 2004, 2005], \\n\",\n    \"           value=[a**2 for a in range(6)]), \\n\",\n    \"    prop=1\\n\",\n    \") \\n\",\n    \"\\n\",\n    \"scrambled >> mutate(previous_year_value = lag(f.value)) >> arrange(f.year)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"driven-criminal\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.171662Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.170605Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.197979Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.196133Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"      <th>previous_year_value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2000</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2001</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2002</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2003</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2004</td>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2005</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>16.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     year   value  previous_year_value\\n\",\n       \"  <int64> <int64>            <float64>\\n\",\n       \"0    2000       0                  0.0\\n\",\n       \"1    2001       1                  NaN\\n\",\n       \"2    2002       4                  4.0\\n\",\n       \"3    2003       9                  1.0\\n\",\n       \"4    2004      16                  9.0\\n\",\n       \"5    2005      25                 16.0\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Use this for lag(value, order_by = year) instead\\n\",\n    \"scrambled >> mutate(previous_year_value = lag(f.value, order_by=f.year)) >> arrange(f.year)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"satisfied-seafood\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/mutate-joins.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"particular-aurora\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:44.282107Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:44.281107Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.500481Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.500907Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fmutate-joins.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ inner_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Inner join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"&emsp;&emsp;`suffix`: A tuple of suffixes to apply to overlapping columns.  \\n\",\n       \"&emsp;&emsp;`keep`: If True, keep the grouping variables in the output.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ left_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Left join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"&emsp;&emsp;`suffix`: A tuple of suffixes to apply to overlapping columns.  \\n\",\n       \"&emsp;&emsp;`keep`: If True, keep the grouping variables in the output.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ right_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Right join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"&emsp;&emsp;`suffix`: A tuple of suffixes to apply to overlapping columns.  \\n\",\n       \"&emsp;&emsp;`keep`: If True, keep the grouping variables in the output.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ full_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Full join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"&emsp;&emsp;`suffix`: A tuple of suffixes to apply to overlapping columns.  \\n\",\n       \"&emsp;&emsp;`keep`: If True, keep the grouping variables in the output.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/mutate-joins.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import band_members, band_instruments, band_instruments2\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(inner_join, left_join, right_join, full_join, book='mutate-joins')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"specialized-renewal\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.539298Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.538740Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.600718Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.601156Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     John  Beatles   guitar\\n\",\n       \"1     Paul  Beatles     bass\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> inner_join(band_instruments)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"scientific-replica\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.617582Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.616769Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.623503Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.624815Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     Mick   Stones      NaN\\n\",\n       \"1     John  Beatles   guitar\\n\",\n       \"2     Paul  Beatles     bass\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> left_join(band_instruments)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"bibliographic-brain\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.649051Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.648385Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.653705Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.654115Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Keith</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     John  Beatles   guitar\\n\",\n       \"1     Paul  Beatles     bass\\n\",\n       \"2    Keith      NaN   guitar\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> right_join(band_instruments)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"timely-variable\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.670644Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.669677Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.706452Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.706961Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Keith</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     Mick   Stones      NaN\\n\",\n       \"1     John  Beatles   guitar\\n\",\n       \"2     Paul  Beatles     bass\\n\",\n       \"3    Keith      NaN   guitar\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> full_join(band_instruments)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"imperial-advisory\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.727825Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.727141Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.734867Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.734025Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     John  Beatles   guitar\\n\",\n       \"1     Paul  Beatles     bass\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> inner_join(band_instruments, by=f.name)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"expensive-indonesian\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.753597Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.752807Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.759345Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.759864Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band    plays\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0     Mick   Stones      NaN\\n\",\n       \"1     John  Beatles   guitar\\n\",\n       \"2     Paul  Beatles     bass\\n\",\n       \"3      NaN      NaN   guitar\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> full_join(band_instruments2, by={'name': 'artist'})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"patient-castle\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.771977Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.765790Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.778140Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.777544Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>artist</th>\\n\",\n       \"      <th>plays</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>bass</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Keith</td>\\n\",\n       \"      <td>guitar</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band   artist    plays\\n\",\n       \"  <object> <object> <object> <object>\\n\",\n       \"0     Mick   Stones      NaN      NaN\\n\",\n       \"1     John  Beatles     John   guitar\\n\",\n       \"2     Paul  Beatles     Paul     bass\\n\",\n       \"3      NaN      NaN    Keith   guitar\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"band_members >> full_join(band_instruments2, by={'name': 'artist'}, keep=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"finite-nicholas\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.783635Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.782999Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:45.948252Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:45.948713Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>first</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>second</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>third</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x        y\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       1    first\\n\",\n       \"1       1   second\\n\",\n       \"2       2    third\\n\",\n       \"3       3      NaN\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df1 = tibble(x=[1,2,3])\\n\",\n    \"df2 = tibble(x=[1,1,2], y=[\\\"first\\\", \\\"second\\\", \\\"third\\\"])\\n\",\n    \"df1 >> left_join(df2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"collected-airport\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.989893Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.989298Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.001899Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.002262Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x       y       z\\n\",\n       \"  <float64> <int64> <int64>\\n\",\n       \"0       1.0       2       3\\n\",\n       \"1       NaN       2       3\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df1 = tibble(x=[1, NA], y=2)\\n\",\n    \"df2 = tibble(x=[1, NA], z=3)\\n\",\n    \"left_join(df1, df2) # na_matches not supported yet\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/mutate.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:29.409806Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:29.408934Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:30.997229Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:30.998642Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fmutate.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ mutate</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add new columns to a data frame.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/mutate.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`_keep`: allows you to control which columns from _data are retained  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in the output:  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"all\\\", the default, retains all variables.\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"used\\\" keeps any variables used to make new variables;\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;it's useful for checking your work as it displays inputs and  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;outputs side-by-side.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unused\\\" keeps only existing variables not used to make new\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;variables.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"none\\\", only keeps grouping keys (like transmute()).\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_before`: A list of column names to put the new columns before.  \\n\",\n       \"&emsp;&emsp;`_after`: A list of column names to put the new columns after.  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs. The name gives the name of the column  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in the output. The value can be:  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- A vector of length 1, which will be recycled to the correct\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;length.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- A vector the same length as the current group (or the whole\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;data frame if ungrouped).  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- None to remove the column\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An object of the same type as _data. The output has the following  \\n\",\n       \"&emsp;&emsp;properties:  \\n\",\n       \"&emsp;&emsp;- Rows are not affected.\\n\",\n       \"&emsp;&emsp;- Existing columns will be preserved according to the _keep\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;argument. New columns will be placed according to the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;_before and _after arguments. If _keep = \\\"none\\\"  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(as in transmute()), the output order is determined only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by ..., not the order of existing columns.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;- Columns given value None will be removed\\n\",\n       \"&emsp;&emsp;- Groups will be recomputed if a grouping variable is mutated.\\n\",\n       \"&emsp;&emsp;- Data frame attributes are preserved.\\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ transmute</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add new columns to a data frame and remove existing columns\\n\",\n       \"using mutate with `_keep=\\\"none\\\"`.  \\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/mutate.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`_before`: A list of column names to put the new columns before.  \\n\",\n       \"&emsp;&emsp;`_after`: A list of column names to put the new columns after.  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs. The name gives the name of the column  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in the output. The value can be:  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- A vector of length 1, which will be recycled to the correct\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;length.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- A vector the same length as the current group (or the whole\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;data frame if ungrouped).  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- None to remove the column\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An object of the same type as _data. The output has the following  \\n\",\n       \"&emsp;&emsp;properties:  \\n\",\n       \"&emsp;&emsp;- Rows are not affected.\\n\",\n       \"&emsp;&emsp;- Existing columns will be preserved according to the _keep\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;argument. New columns will be placed according to the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;_before and _after arguments. If _keep = \\\"none\\\"  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(as in transmute()), the output order is determined only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by ..., not the order of existing columns.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;- Columns given value None will be removed\\n\",\n       \"&emsp;&emsp;- Groups will be recomputed if a grouping variable is mutated.\\n\",\n       \"&emsp;&emsp;- Data frame attributes are preserved.\\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/mutate.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(mutate, transmute)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:31.141772Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:31.139442Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:31.385585Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:31.386137Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>mass2</th>\\n\",\n       \"      <th>mass2_squared</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>154.0</td>\\n\",\n       \"      <td>23716.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>22500.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>64.0</td>\\n\",\n       \"      <td>4096.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>272.0</td>\\n\",\n       \"      <td>73984.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>98.0</td>\\n\",\n       \"      <td>9604.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>90.0</td>\\n\",\n       \"      <td>8100.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 4 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name      mass     mass2  mass2_squared\\n\",\n       \"          <object> <float64> <float64>      <float64>\\n\",\n       \"0   Luke Skywalker      77.0     154.0        23716.0\\n\",\n       \"1            C-3PO      75.0     150.0        22500.0\\n\",\n       \"2            R2-D2      32.0      64.0         4096.0\\n\",\n       \"3      Darth Vader     136.0     272.0        73984.0\\n\",\n       \"..             ...       ...       ...            ...\\n\",\n       \"4      Leia Organa      49.0      98.0         9604.0\\n\",\n       \"82             Rey       NaN       NaN            NaN\\n\",\n       \"83     Poe Dameron       NaN       NaN            NaN\\n\",\n       \"84             BB8       NaN       NaN            NaN\\n\",\n       \"85  Captain Phasma       NaN       NaN            NaN\\n\",\n       \"86   Padmé Amidala      45.0      90.0         8100.0\\n\",\n       \"\\n\",\n       \"[87 rows x 4 columns]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \" select(f.name, f.mass) >> \\\\\\n\",\n    \" mutate(\\n\",\n    \"  mass2 = f.mass * 2,\\n\",\n    \"  mass2_squared = f.mass2 * f.mass2\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:31.461979Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:31.461231Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:31.496176Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:31.496697Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>5.643045</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>5.479003</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>3.149606</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>6.627297</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>4.921260</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>5.413386</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name    height homeworld\\n\",\n       \"          <object> <float64>  <object>\\n\",\n       \"0   Luke Skywalker  5.643045  Tatooine\\n\",\n       \"1            C-3PO  5.479003  Tatooine\\n\",\n       \"2            R2-D2  3.149606     Naboo\\n\",\n       \"3      Darth Vader  6.627297  Tatooine\\n\",\n       \"..             ...       ...       ...\\n\",\n       \"4      Leia Organa  4.921260  Alderaan\\n\",\n       \"82             Rey       NaN       NaN\\n\",\n       \"83     Poe Dameron       NaN       NaN\\n\",\n       \"84             BB8       NaN       NaN\\n\",\n       \"85  Captain Phasma       NaN       NaN\\n\",\n       \"86   Padmé Amidala  5.413386     Naboo\\n\",\n       \"\\n\",\n       \"[87 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \" select(f.name, f.height, f.mass, f.homeworld) >> \\\\\\n\",\n    \" mutate(\\n\",\n    \"  mass = NULL,\\n\",\n    \"  height = f.height * 0.0328084 # convert to feet\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:31.600675Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:31.599829Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:31.841281Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:31.841670Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"name           object\\n\",\n       \"homeworld    category\\n\",\n       \"species      category\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name  homeworld    species\\n\",\n       \"          <object> <category> <category>\\n\",\n       \"0   Luke Skywalker   Tatooine      Human\\n\",\n       \"1            C-3PO   Tatooine      Droid\\n\",\n       \"2            R2-D2      Naboo      Droid\\n\",\n       \"3      Darth Vader   Tatooine      Human\\n\",\n       \"..             ...        ...        ...\\n\",\n       \"4      Leia Organa   Alderaan      Human\\n\",\n       \"82             Rey        NaN      Human\\n\",\n       \"83     Poe Dameron        NaN      Human\\n\",\n       \"84             BB8        NaN      Droid\\n\",\n       \"85  Captain Phasma        NaN        NaN\\n\",\n       \"86   Padmé Amidala      Naboo      Human\\n\",\n       \"\\n\",\n       \"[87 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = starwars >> \\\\\\n\",\n    \" select(f.name, f.homeworld, f.species) >> \\\\\\n\",\n    \" mutate(across(~f.name, as_factor))\\n\",\n    \"\\n\",\n    \"x.dtypes\\n\",\n    \"x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:32.021295Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:32.017771Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.341775Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.344792Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>rank</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 4 columns</p>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: homeworld (n=49)\"\n      ],\n      \"text/plain\": [\n       \"              name      mass homeworld      rank\\n\",\n       \"          <object> <float64>  <object> <float64>\\n\",\n       \"0   Luke Skywalker      77.0  Tatooine       5.0\\n\",\n       \"1            C-3PO      75.0  Tatooine       6.0\\n\",\n       \"2            R2-D2      32.0     Naboo       6.0\\n\",\n       \"3      Darth Vader     136.0  Tatooine       1.0\\n\",\n       \"..             ...       ...       ...       ...\\n\",\n       \"4      Leia Organa      49.0  Alderaan       2.0\\n\",\n       \"82             Rey       NaN       NaN       NaN\\n\",\n       \"83     Poe Dameron       NaN       NaN       NaN\\n\",\n       \"84             BB8       NaN       NaN       NaN\\n\",\n       \"85  Captain Phasma       NaN       NaN       NaN\\n\",\n       \"86   Padmé Amidala      45.0     Naboo       5.0\\n\",\n       \"\\n\",\n       \"[87 rows x 4 columns]\\n\",\n       \"[TibbleGrouped: homeworld (n=49)]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \" select(f.name, f.mass, f.homeworld) >> \\\\\\n\",\n    \" group_by(f.homeworld) >> \\\\\\n\",\n    \" mutate(rank=min_rank(desc(f.mass))) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.378882Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.378130Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.629759Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.630203Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y       z\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       2       3\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=1, y=2)\\n\",\n    \"\\n\",\n    \"df >> mutate(z=f.x+f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.748376Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.747738Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.758078Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.758450Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       z       y\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       3       2\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(z=f.x+f.y, _before=1) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.807964Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.807276Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.824793Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.825249Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       z       y\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       3       2\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(z=f.x+f.y, _after=f.x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.853847Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.853035Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.860203Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.860590Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       z       y\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       6       2\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# use a temporary column\\n\",\n    \"df >> mutate(_z=f.x+f.y, z=f._z*2, _after=f.x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.903931Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.903197Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.913176Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.913626Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y        a        b       z\\n\",\n       \"  <int64> <int64> <object> <object> <int64>\\n\",\n       \"0       1       2        a        b       3\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=1, y=2, a=\\\"a\\\", b=\\\"b\\\")\\n\",\n    \"df >> mutate(z=f.x+f.y, _keep='all')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.959501Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.958877Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.987426Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.987823Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y       z\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       1       2       3\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(z=f.x+f.y, _keep='used')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.079819Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.078253Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.098820Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.100887Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b       z\\n\",\n       \"  <object> <object> <int64>\\n\",\n       \"0        a        b       3\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(z=f.x+f.y, _keep='unused')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.156265Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.155652Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.190824Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.191228Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        z\\n\",\n       \"  <int64>\\n\",\n       \"0       3\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(z=f.x+f.y, _keep='none')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.225635Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.224984Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.231807Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.234535Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>mass_norm</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.791270</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>0.770718</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>0.328840</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>1.397569</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.503536</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.462431</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 4 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name      mass  species  mass_norm\\n\",\n       \"          <object> <float64> <object>  <float64>\\n\",\n       \"0   Luke Skywalker      77.0    Human   0.791270\\n\",\n       \"1            C-3PO      75.0    Droid   0.770718\\n\",\n       \"2            R2-D2      32.0    Droid   0.328840\\n\",\n       \"3      Darth Vader     136.0    Human   1.397569\\n\",\n       \"..             ...       ...      ...        ...\\n\",\n       \"4      Leia Organa      49.0    Human   0.503536\\n\",\n       \"82             Rey       NaN    Human        NaN\\n\",\n       \"83     Poe Dameron       NaN    Human        NaN\\n\",\n       \"84             BB8       NaN    Droid        NaN\\n\",\n       \"85  Captain Phasma       NaN      NaN        NaN\\n\",\n       \"86   Padmé Amidala      45.0    Human   0.462431\\n\",\n       \"\\n\",\n       \"[87 rows x 4 columns]\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"  select(f.name, f.mass, f.species) >> \\\\\\n\",\n    \"  mutate(mass_norm=f.mass/mean(f.mass)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.326340Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.325605Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.536838Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.537283Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>mass_norm</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.930156</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>1.075269</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>0.458781</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>1.642873</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.591917</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>0.543598</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 4 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name      mass  species  mass_norm\\n\",\n       \"          <object> <float64> <object>  <float64>\\n\",\n       \"0   Luke Skywalker      77.0    Human   0.930156\\n\",\n       \"1            C-3PO      75.0    Droid   1.075269\\n\",\n       \"2            R2-D2      32.0    Droid   0.458781\\n\",\n       \"3      Darth Vader     136.0    Human   1.642873\\n\",\n       \"..             ...       ...      ...        ...\\n\",\n       \"4      Leia Organa      49.0    Human   0.591917\\n\",\n       \"82             Rey       NaN    Human        NaN\\n\",\n       \"83     Poe Dameron       NaN    Human        NaN\\n\",\n       \"84             BB8       NaN    Droid        NaN\\n\",\n       \"85  Captain Phasma       NaN      NaN        NaN\\n\",\n       \"86   Padmé Amidala      45.0    Human   0.543598\\n\",\n       \"\\n\",\n       \"[87 rows x 4 columns]\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"  select(f.name, f.mass, f.species) >> \\\\\\n\",\n    \"  group_by(f.species) >> \\\\\\n\",\n    \"  mutate(mass_norm=f.mass / mean(f.mass)) >> \\\\\\n\",\n    \"  ungroup() \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.629345Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.628648Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.644407Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.644860Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"      <th>prod</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>13244.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>12525.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>3072.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>27472.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>7350.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>46.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"      <td>7425.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 12 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name    height      mass hair_color   skin_color eye_color  \\\\\\n\",\n       \"          <object> <float64> <float64>   <object>     <object>  <object>   \\n\",\n       \"0   Luke Skywalker     172.0      77.0      blond         fair      blue   \\n\",\n       \"1            C-3PO     167.0      75.0        NaN         gold    yellow   \\n\",\n       \"2            R2-D2      96.0      32.0        NaN  white, blue       red   \\n\",\n       \"3      Darth Vader     202.0     136.0       none        white    yellow   \\n\",\n       \"..             ...       ...       ...        ...          ...       ...   \\n\",\n       \"4      Leia Organa     150.0      49.0      brown        light     brown   \\n\",\n       \"82             Rey       NaN       NaN      brown        light     hazel   \\n\",\n       \"83     Poe Dameron       NaN       NaN      brown        light     brown   \\n\",\n       \"84             BB8       NaN       NaN       none         none     black   \\n\",\n       \"85  Captain Phasma       NaN       NaN    unknown      unknown   unknown   \\n\",\n       \"86   Padmé Amidala     165.0      45.0      brown        light     brown   \\n\",\n       \"\\n\",\n       \"    birth_year      sex     gender homeworld  species      prod  \\n\",\n       \"     <float64> <object>   <object>  <object> <object> <float64>  \\n\",\n       \"0         19.0     male  masculine  Tatooine    Human   13244.0  \\n\",\n       \"1        112.0     none  masculine  Tatooine    Droid   12525.0  \\n\",\n       \"2         33.0     none  masculine     Naboo    Droid    3072.0  \\n\",\n       \"3         41.9     male  masculine  Tatooine    Human   27472.0  \\n\",\n       \"..         ...      ...        ...       ...      ...       ...  \\n\",\n       \"4         19.0   female   feminine  Alderaan    Human    7350.0  \\n\",\n       \"82         NaN   female   feminine       NaN    Human       NaN  \\n\",\n       \"83         NaN     male  masculine       NaN    Human       NaN  \\n\",\n       \"84         NaN     none  masculine       NaN    Droid       NaN  \\n\",\n       \"85         NaN      NaN        NaN       NaN      NaN       NaN  \\n\",\n       \"86        46.0   female   feminine     Naboo    Human    7425.0  \\n\",\n       \"\\n\",\n       \"[87 rows x 12 columns]\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"vars = [\\\"mass\\\", \\\"height\\\"]\\n\",\n    \"starwars >> mutate(starwars, prod=f[vars[0]] * f[vars[1]])\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/n_distinct.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"several-cowboy\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.196543Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.195916Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:08.127610Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:08.128233Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fn_distinct.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ sample</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Sample a vector\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: a vector or scaler  \\n\",\n       \"&emsp;&emsp;`size`: the size of the sample  \\n\",\n       \"&emsp;&emsp;`replace`: whether to sample with replacement  \\n\",\n       \"&emsp;&emsp;`prob`: the probabilities of sampling each element  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The sampled vector  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ n_distinct</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Count the number of distinct values\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/distinct.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`na_rm`: If `True`, remove missing values before counting.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The number of distinct values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/n_distinct.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import sample, n_distinct\\n\",\n    \"\\n\",\n    \"nb_header(sample, n_distinct, book='n_distinct')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"sharing-michigan\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:08.142741Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:08.141395Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:08.149693Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:08.150142Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"100000\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = sample(range(10), 1e5, replace=True)\\n\",\n    \"len(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"interested-store\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:08.215359Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:08.214713Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:08.311083Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:08.310511Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"10\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"n_distinct(x)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/na_if.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"ddb0828f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.626180Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.625478Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.726717Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.725906Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fna_if.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ na_if</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Replace values with missing values\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/na_if.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`value`: Values to replace with missing values.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/na_if.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(na_if)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"6be7b8cf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.742022Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.741052Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.749111Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.748355Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    0.0\\n\",\n       \"1    1.0\\n\",\n       \"2    NaN\\n\",\n       \"3    3.0\\n\",\n       \"4    4.0\\n\",\n       \"Name: x, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"na_if(range(5), list(range(4,-1,-1)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"c9c23967\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.765321Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.764648Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.914243Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.913240Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    100.0\\n\",\n       \"1   -100.0\\n\",\n       \"2      inf\\n\",\n       \"3     10.0\\n\",\n       \"Name: x, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = tibble(x=[1, -1, 0, 10]).x\\n\",\n    \"100 / x\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"b77113cc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.926337Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.925244Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.929053Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.929499Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     1.0\\n\",\n       \"1    -1.0\\n\",\n       \"2     NaN\\n\",\n       \"3    10.0\\n\",\n       \"Name: x, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"na_if(x, 0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"9855ec95\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.939256Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.937975Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.961121Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.961571Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    abc\\n\",\n       \"1    def\\n\",\n       \"2    NaN\\n\",\n       \"3    ghi\\n\",\n       \"Name: x, dtype: object\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"y = tibble(y=[\\\"abc\\\", \\\"def\\\", \\\"\\\", \\\"ghi\\\"]).y\\n\",\n    \"na_if(y, \\\"\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"5296a66c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:35.019008Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:35.016615Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:35.082509Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:35.083282Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 2 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name eye_color\\n\",\n       \"          <object>  <object>\\n\",\n       \"0   Luke Skywalker      blue\\n\",\n       \"1            C-3PO    yellow\\n\",\n       \"2            R2-D2       red\\n\",\n       \"3      Darth Vader    yellow\\n\",\n       \"..             ...       ...\\n\",\n       \"4      Leia Organa     brown\\n\",\n       \"82             Rey     hazel\\n\",\n       \"83     Poe Dameron     brown\\n\",\n       \"84             BB8     black\\n\",\n       \"85  Captain Phasma       NaN\\n\",\n       \"86   Padmé Amidala     brown\\n\",\n       \"\\n\",\n       \"[87 rows x 2 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"  select(f.name, f.eye_color) >> \\\\\\n\",\n    \"  mutate(eye_color = na_if(f.eye_color, \\\"unknown\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"11e9a9d2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:35.180726Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:35.180148Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:35.188513Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:35.188945Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>46.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 11 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name    height      mass hair_color   skin_color eye_color  \\\\\\n\",\n       \"          <object> <float64> <float64>   <object>     <object>  <object>   \\n\",\n       \"0   Luke Skywalker     172.0      77.0      blond         fair      blue   \\n\",\n       \"1            C-3PO     167.0      75.0        NaN         gold    yellow   \\n\",\n       \"2            R2-D2      96.0      32.0        NaN  white, blue       red   \\n\",\n       \"3      Darth Vader     202.0     136.0       none        white    yellow   \\n\",\n       \"..             ...       ...       ...        ...          ...       ...   \\n\",\n       \"4      Leia Organa     150.0      49.0      brown        light     brown   \\n\",\n       \"82             Rey       NaN       NaN      brown        light     hazel   \\n\",\n       \"83     Poe Dameron       NaN       NaN      brown        light     brown   \\n\",\n       \"84             BB8       NaN       NaN       none         none     black   \\n\",\n       \"85  Captain Phasma       NaN       NaN        NaN          NaN       NaN   \\n\",\n       \"86   Padmé Amidala     165.0      45.0      brown        light     brown   \\n\",\n       \"\\n\",\n       \"    birth_year      sex     gender homeworld  species  \\n\",\n       \"     <float64> <object>   <object>  <object> <object>  \\n\",\n       \"0         19.0     male  masculine  Tatooine    Human  \\n\",\n       \"1        112.0     none  masculine  Tatooine    Droid  \\n\",\n       \"2         33.0     none  masculine     Naboo    Droid  \\n\",\n       \"3         41.9     male  masculine  Tatooine    Human  \\n\",\n       \"..         ...      ...        ...       ...      ...  \\n\",\n       \"4         19.0   female   feminine  Alderaan    Human  \\n\",\n       \"82         NaN   female   feminine       NaN    Human  \\n\",\n       \"83         NaN     male  masculine       NaN    Human  \\n\",\n       \"84         NaN     none  masculine       NaN    Droid  \\n\",\n       \"85         NaN      NaN        NaN       NaN      NaN  \\n\",\n       \"86        46.0   female   feminine     Naboo    Human  \\n\",\n       \"\\n\",\n       \"[87 rows x 11 columns]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> \\\\\\n\",\n    \"   mutate(across(where(is_character), lambda x: na_if(x, \\\"unknown\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"4f05cb1f\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/nb_helpers.py",
    "content": "\"\"\"helpers for notebooks\"\"\"\nfrom contextlib import contextmanager\n\nfrom IPython.display import display, Markdown, HTML\nfrom IPython.core.interactiveshell import InteractiveShell\nimport pardoc\nfrom varname.helpers import debug  # noqa\nfrom datar import options\n\noptions(allow_conflict_names=True)\n\nInteractiveShell.ast_node_interactivity = \"all\"\n\nBINDER_URL = (\n    \"https://mybinder.org/v2/gh/pwwang/datar/\"\n    \"dev?filepath=docs%2Fnotebooks%2F\"\n)\n\n\ndef nb_header(*funcs, book=None):\n    \"\"\"Print the header of a notebooks, mostly the docs\"\"\"\n    if book is None:\n        book = funcs[0].__name__\n    display(\n        HTML(\n            '<div style=\"text-align: right; text-style: italic\">'\n            'Try this notebook on '\n            f'<a target=\"_blank\" href=\"{BINDER_URL}{book}.ipynb\">'\n            \"binder</a>.</div>\"\n        )\n    )\n\n    for func in funcs:\n        try:\n            parsed = pardoc.google_parser.parse(func.__doc__)\n            try:\n                del parsed[\"Examples\"]\n            except KeyError:\n                pass\n        except Exception:\n            formatted = func.__doc__\n        else:\n            formatted = pardoc.google_parser.format(\n                parsed,\n                to=\"markdown\",\n                heading=5,\n                indent_base=\"&emsp;&emsp;\",\n            )\n\n        display(Markdown(\n            f'{\"#\"*3} '\n            '<div style=\"background-color: #EEE; padding: 5px 0 8px 0\">'\n            f'★ {func.__name__}'\n            '</div>')\n        )\n        display(Markdown(formatted))\n\n\n@contextmanager\ndef try_catch():\n    \"\"\"Catch the error and print it out\"\"\"\n    try:\n        yield\n    except Exception as exc:\n        print(f\"[{type(exc).__name__}] {exc}\")\n"
  },
  {
    "path": "docs/notebooks/near.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"permanent-waters\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:33.908144Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:33.907513Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:34.718530Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:34.718946Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fnear.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ near</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Check if values are approximately equal\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/near.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`y`: A numeric vector  \\n\",\n       \"&emsp;&emsp;`tol`: Tolerance  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An array of boolean values  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/near.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(near)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"employed-supplier\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:34.724636Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:34.723973Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:34.727483Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:34.727978Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"False\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"sqrt(2.0) ** 2.0 == 2.0\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"black-decimal\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:34.734438Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:34.733793Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:34.736689Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:34.737085Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"True\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"near(sqrt(2.0) ** 2.0, 2.0)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/nest-join.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"adverse-thesis\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:21.040914Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:21.040207Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.128495Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.128914Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fnest-join.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ nest_join</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Nest join two data frames by matching rows.\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/join.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: A list of column names to join by.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If None, use the intersection of the columns of x and y.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If True, always copy the data.  \\n\",\n       \"&emsp;&emsp;`keep`: If True, keep the grouping variables in the output.  \\n\",\n       \"&emsp;&emsp;`name`: The name of the column to store the nested data frame.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/nest_join.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import band_members, band_instruments\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(nest_join, book='nest-join')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"green-continuity\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.136012Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.135245Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.213886Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.214257Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>band</th>\\n\",\n       \"      <th>_y_joined</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Mick</td>\\n\",\n       \"      <td>Stones</td>\\n\",\n       \"      <td>&lt;DF 0x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>John</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>&lt;DF 1x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Paul</td>\\n\",\n       \"      <td>Beatles</td>\\n\",\n       \"      <td>&lt;DF 1x1&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      name     band _y_joined\\n\",\n       \"  <object> <object>  <object>\\n\",\n       \"0     Mick   Stones  <DF 0x1>\\n\",\n       \"1     John  Beatles  <DF 1x1>\\n\",\n       \"2     Paul  Beatles  <DF 1x1>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nested = band_members >> nest_join(band_instruments)\\n\",\n    \"nested\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"french-egyptian\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.228931Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.228284Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.238218Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.237726Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[Empty Tibble\\n\",\n       \" Columns: [plays]\\n\",\n       \" Index: [],\\n\",\n       \"      plays\\n\",\n       \"   <object>\\n\",\n       \" 0   guitar]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nested >> head(2) >> pull(f._y_joined, to='list')\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/nest.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:25.625315Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:25.624736Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:26.572586Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:26.573026Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fnest.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ nest</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Nesting creates a list-column of data frames\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`**cols`: Columns to nest  \\n\",\n       \"&emsp;&emsp;`_names_sep`: If `None`, the default, the names will be left as is.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Inner names will come from the former outer names  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If a string, the inner and outer names will be used together.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The names of the new outer columns will be formed by pasting  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;together the outer and the inner column names, separated by  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`_names_sep`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Nested data frame.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ unnest</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Flattens list-column of data frames back out into regular columns.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame to flatten.  \\n\",\n       \"&emsp;&emsp;`*cols`: Columns to unnest.  \\n\",\n       \"&emsp;&emsp;`keep_empty`: By default, you get one row of output for each element  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;of the list your unchopping/unnesting.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This means that if there's a size-0 element  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(like NULL or an empty data frame), that entire row will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;dropped from the output.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If you want to preserve all rows, use `keep_empty` = `True` to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;replace size-0 elements with a single row of missing values.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`dtypes`: Providing the dtypes for the output columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Could be a single dtype, which will be applied to all columns, or  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a dictionary of dtypes with keys for the columns and values the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;dtypes.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`names_sep`: If `None`, the default, the names will be left as is.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Inner names will come from the former outer names  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If a string, the inner and outer names will be used together.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The names of the new outer columns will be formed by pasting  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;together the outer and the inner column names, separated by  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`names_sep`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`names_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Data frame with selected columns unnested.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.data import iris, fish_encounters, mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(nest, unnest)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:26.583824Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:26.583030Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.019996Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.020368Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>&lt;DF 1x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x      data\\n\",\n       \"  <int64>  <object>\\n\",\n       \"0       1  <DF 3x2>\\n\",\n       \"1       2  <DF 2x2>\\n\",\n       \"2       3  <DF 1x2>\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(1, 1, 1, 2, 2, 3), y = c[1:7], z = c[7:1])\\n\",\n    \"df >> nest(data=c(f.y, f.z))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.060315Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.059733Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.064175Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.065038Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>[1, 2, 3]</td>\\n\",\n       \"      <td>[7, 6, 5]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>[4, 5]</td>\\n\",\n       \"      <td>[4, 3]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>[6]</td>\\n\",\n       \"      <td>[2]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x          y          z\\n\",\n       \"  <int64>   <object>   <object>\\n\",\n       \"0       1  [1, 2, 3]  [7, 6, 5]\\n\",\n       \"1       2     [4, 5]     [4, 3]\\n\",\n       \"2       3        [6]        [2]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> chop(c(f.y, f.z))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.076559Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.075937Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.112744Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.113138Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>&lt;DF 1x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x      data\\n\",\n       \"  <int64>  <object>\\n\",\n       \"0       1  <DF 3x2>\\n\",\n       \"1       2  <DF 2x2>\\n\",\n       \"2       3  <DF 1x2>\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> nest(data=any_of(c(f.y, f.z)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.142333Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.141724Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.165121Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.165508Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>1.7</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>2.9</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>3.7</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>4.8</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>4.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.1</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>5.8</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.2</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>5.7</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>1.7</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.7</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.7</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.3</td>\\n\",\n       \"      <td>1.7</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>4.8</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>4.8</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>4.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>5.5</td>\\n\",\n       \"      <td>4.2</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.2</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>5.5</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>4.5</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>4.4</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>4.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.8</td>\\n\",\n       \"      <td>1.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>5.3</td>\\n\",\n       \"      <td>3.7</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.3</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    Sepal_Length  Sepal_Width  Petal_Length  Petal_Width\\n\",\n       \"       <float64>    <float64>     <float64>    <float64>\\n\",\n       \"0            5.1          3.5           1.4          0.2\\n\",\n       \"1            4.9          3.0           1.4          0.2\\n\",\n       \"2            4.7          3.2           1.3          0.2\\n\",\n       \"3            4.6          3.1           1.5          0.2\\n\",\n       \"4            5.0          3.6           1.4          0.2\\n\",\n       \"5            5.4          3.9           1.7          0.4\\n\",\n       \"6            4.6          3.4           1.4          0.3\\n\",\n       \"7            5.0          3.4           1.5          0.2\\n\",\n       \"8            4.4          2.9           1.4          0.2\\n\",\n       \"9            4.9          3.1           1.5          0.1\\n\",\n       \"10           5.4          3.7           1.5          0.2\\n\",\n       \"11           4.8          3.4           1.6          0.2\\n\",\n       \"12           4.8          3.0           1.4          0.1\\n\",\n       \"13           4.3          3.0           1.1          0.1\\n\",\n       \"14           5.8          4.0           1.2          0.2\\n\",\n       \"15           5.7          4.4           1.5          0.4\\n\",\n       \"16           5.4          3.9           1.3          0.4\\n\",\n       \"17           5.1          3.5           1.4          0.3\\n\",\n       \"18           5.7          3.8           1.7          0.3\\n\",\n       \"19           5.1          3.8           1.5          0.3\\n\",\n       \"20           5.4          3.4           1.7          0.2\\n\",\n       \"21           5.1          3.7           1.5          0.4\\n\",\n       \"22           4.6          3.6           1.0          0.2\\n\",\n       \"23           5.1          3.3           1.7          0.5\\n\",\n       \"24           4.8          3.4           1.9          0.2\\n\",\n       \"25           5.0          3.0           1.6          0.2\\n\",\n       \"26           5.0          3.4           1.6          0.4\\n\",\n       \"27           5.2          3.5           1.5          0.2\\n\",\n       \"28           5.2          3.4           1.4          0.2\\n\",\n       \"29           4.7          3.2           1.6          0.2\\n\",\n       \"30           4.8          3.1           1.6          0.2\\n\",\n       \"31           5.4          3.4           1.5          0.4\\n\",\n       \"32           5.2          4.1           1.5          0.1\\n\",\n       \"33           5.5          4.2           1.4          0.2\\n\",\n       \"34           4.9          3.1           1.5          0.2\\n\",\n       \"35           5.0          3.2           1.2          0.2\\n\",\n       \"36           5.5          3.5           1.3          0.2\\n\",\n       \"37           4.9          3.6           1.4          0.1\\n\",\n       \"38           4.4          3.0           1.3          0.2\\n\",\n       \"39           5.1          3.4           1.5          0.2\\n\",\n       \"40           5.0          3.5           1.3          0.3\\n\",\n       \"41           4.5          2.3           1.3          0.3\\n\",\n       \"42           4.4          3.2           1.3          0.2\\n\",\n       \"43           5.0          3.5           1.6          0.6\\n\",\n       \"44           5.1          3.8           1.9          0.4\\n\",\n       \"45           4.8          3.0           1.4          0.3\\n\",\n       \"46           5.1          3.8           1.6          0.2\\n\",\n       \"47           4.6          3.2           1.4          0.2\\n\",\n       \"48           5.3          3.7           1.5          0.2\\n\",\n       \"49           5.0          3.3           1.4          0.2\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"out = iris >> nest(data=~f.Species)\\n\",\n    \"out.data[0]\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.186712Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.177083Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.196394Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.195914Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>&lt;DF 50x4&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>&lt;DF 50x4&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>&lt;DF 50x4&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species       data\\n\",\n       \"     <object>   <object>\\n\",\n       \"0      setosa  <DF 50x4>\\n\",\n       \"1  versicolor  <DF 50x4>\\n\",\n       \"2   virginica  <DF 50x4>\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nest_vars = colnames(iris)[:4]\\n\",\n    \"iris >> nest(data = any_of(nest_vars))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.207533Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.206940Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.234790Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.235261Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>petal</th>\\n\",\n       \"      <th>sepal</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species      petal      sepal\\n\",\n       \"     <object>   <object>   <object>\\n\",\n       \"0      setosa  <DF 50x2>  <DF 50x2>\\n\",\n       \"1  versicolor  <DF 50x2>  <DF 50x2>\\n\",\n       \"2   virginica  <DF 50x2>  <DF 50x2>\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> nest(petal = starts_with(\\\"Petal\\\"), sepal = starts_with(\\\"Sepal\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.265853Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.246908Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.279510Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.279907Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>width</th>\\n\",\n       \"      <th>length</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>versicolor</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"      <td>&lt;DF 50x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      Species      width     length\\n\",\n       \"     <object>   <object>   <object>\\n\",\n       \"0      setosa  <DF 50x2>  <DF 50x2>\\n\",\n       \"1  versicolor  <DF 50x2>  <DF 50x2>\\n\",\n       \"2   virginica  <DF 50x2>  <DF 50x2>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> nest(width = contains(\\\"Width\\\"), length = contains(\\\"Length\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.333173Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.302622Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.338132Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.337041Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>fish</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>&lt;DF 11x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4843</td>\\n\",\n       \"      <td>&lt;DF 11x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4844</td>\\n\",\n       \"      <td>&lt;DF 11x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4845</td>\\n\",\n       \"      <td>&lt;DF 5x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4847</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>4848</td>\\n\",\n       \"      <td>&lt;DF 4x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>4849</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>4850</td>\\n\",\n       \"      <td>&lt;DF 6x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4851</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>4854</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>4855</td>\\n\",\n       \"      <td>&lt;DF 5x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>4857</td>\\n\",\n       \"      <td>&lt;DF 9x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>4858</td>\\n\",\n       \"      <td>&lt;DF 11x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4859</td>\\n\",\n       \"      <td>&lt;DF 5x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>4861</td>\\n\",\n       \"      <td>&lt;DF 11x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>4862</td>\\n\",\n       \"      <td>&lt;DF 9x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>4863</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>4864</td>\\n\",\n       \"      <td>&lt;DF 2x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>&lt;DF 3x2&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: fish (n=19)\"\n      ],\n      \"text/plain\": [\n       \"      fish       data\\n\",\n       \"   <int64>   <object>\\n\",\n       \"0     4842  <DF 11x2>\\n\",\n       \"1     4843  <DF 11x2>\\n\",\n       \"2     4844  <DF 11x2>\\n\",\n       \"3     4845   <DF 5x2>\\n\",\n       \"4     4847   <DF 3x2>\\n\",\n       \"5     4848   <DF 4x2>\\n\",\n       \"6     4849   <DF 2x2>\\n\",\n       \"7     4850   <DF 6x2>\\n\",\n       \"8     4851   <DF 2x2>\\n\",\n       \"9     4854   <DF 2x2>\\n\",\n       \"10    4855   <DF 5x2>\\n\",\n       \"11    4857   <DF 9x2>\\n\",\n       \"12    4858  <DF 11x2>\\n\",\n       \"13    4859   <DF 5x2>\\n\",\n       \"14    4861  <DF 11x2>\\n\",\n       \"15    4862   <DF 9x2>\\n\",\n       \"16    4863   <DF 2x2>\\n\",\n       \"17    4864   <DF 2x2>\\n\",\n       \"18    4865   <DF 3x2>\\n\",\n       \"[TibbleGrouped: fish (n=19)]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fish_encounters >> group_by(f.fish) >> nest()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.401063Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.398103Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.445576Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.445023Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>data</th>\\n\",\n       \"      <th>models</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>&lt;DF 7x10&gt;</td>\\n\",\n       \"      <td>&lt;df 7x10&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>&lt;DF 11x10&gt;</td>\\n\",\n       \"      <td>&lt;df 11x10&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>&lt;DF 14x10&gt;</td>\\n\",\n       \"      <td>&lt;df 14x10&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"      cyl        data      models\\n\",\n       \"  <int64>    <object>    <object>\\n\",\n       \"0       6   <DF 7x10>   <df 7x10>\\n\",\n       \"1       4  <DF 11x10>  <df 11x10>\\n\",\n       \"2       8  <DF 14x10>  <df 14x10>\\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from pipda import register_func\\n\",\n    \"@register_func()\\n\",\n    \"def get_models(dfs):\\n\",\n    \"    # do whatever with the dfs\\n\",\n    \"    \\n\",\n    \"    return dfs.transform(lambda df: f\\\"<df {df.values[0].shape[0]}x{df.values[0].shape[1]}>\\\")\\n\",\n    \"\\n\",\n    \"mtcars >> group_by(f.cyl) >> nest() >> mutate(\\n\",\n    \"    models=get_models(f.data)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.451681Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.451136Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.522976Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.523384Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       a       b\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       2       1       2\\n\",\n       \"1       3       1       4\\n\",\n       \"2       3       2       3\\n\",\n       \"3       3       3       2\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  x = c[1:4],\\n\",\n    \"  y = [\\n\",\n    \"    NULL,\\n\",\n    \"    tibble(a = 1, b = 2),\\n\",\n    \"    tibble(a = c[1:4], b = c[4:1])\\n\",\n    \"  ]\\n\",\n    \")\\n\",\n    \"df >> unnest(f.y, dtypes=int)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.535876Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.535230Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.539200Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.539748Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x         a         b\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       1       NaN       NaN\\n\",\n       \"1       2       1.0       2.0\\n\",\n       \"2       3       1.0       4.0\\n\",\n       \"3       3       2.0       3.0\\n\",\n       \"4       3       3.0       2.0\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unnest(f.y, keep_empty=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.550880Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.550236Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.583140Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.582704Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a       b       c\\n\",\n       \"  <object> <int64> <int64>\\n\",\n       \"0        a       1      11\\n\",\n       \"1        b       2      11\\n\",\n       \"2        c       3      22\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \" a = [c(\\\"a\\\", \\\"b\\\"), \\\"c\\\"],\\n\",\n    \" b = [[1,2], 3],\\n\",\n    \" c = c(11, 22)\\n\",\n    \")\\n\",\n    \"df >> unnest(c(f.a, f.b))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:27.614822Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:27.614040Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:27.617574Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:27.617933Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a       b       c\\n\",\n       \"  <object> <int64> <int64>\\n\",\n       \"0        a       1      11\\n\",\n       \"1        a       2      11\\n\",\n       \"2        b       1      11\\n\",\n       \"3        b       2      11\\n\",\n       \"4        c       3      22\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unnest(f.a) >> unnest(f.b)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/nth.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"respiratory-velvet\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:04.461490Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:04.459178Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.559045Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.559494Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fnth.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ nth</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract the nth element of a vector\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/nth.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`n`: The index of the element to extract.  \\n\",\n       \"&emsp;&emsp;`order_by`: A variable or function of variables to order by.  \\n\",\n       \"&emsp;&emsp;`default`: A default value to return if `n` is out of bounds.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A value  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ first</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract the first element of a vector\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/nth.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`order_by`: A variable or function of variables to order by.  \\n\",\n       \"&emsp;&emsp;`default`: A default value to return if `x` is empty.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A value  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ last</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract the last element of a vector\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/nth.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector  \\n\",\n       \"&emsp;&emsp;`order_by`: A variable or function of variables to order by.  \\n\",\n       \"&emsp;&emsp;`default`: A default value to return if `x` is empty.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A value  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/nth.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import nth, first, last\\n\",\n    \"\\n\",\n    \"nb_header(nth, first, last)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"suspected-addiction\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.566582Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.565966Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.581974Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.582386Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = range(10)\\n\",\n    \"y = range(9, -1, -1)\\n\",\n    \"\\n\",\n    \"first(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"rural-rubber\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.593935Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.593386Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.610636Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.611118Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"last(y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"developing-fossil\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.627629Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.626943Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.643278Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.643642Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"1\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nth(x, 1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"three-assignment\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.653602Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.652989Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.670826Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.671225Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"5\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nth(x, 5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"approximate-indonesia\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.684961Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.684355Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.700891Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.701266Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"8\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nth(x, -2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"handy-stack\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.716492Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.713952Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.728899Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.729314Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"nan\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"nth(x, 11)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"everyday-kinase\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.739057Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.738002Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.757661Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.758059Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"9\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"last(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"remarkable-remainder\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.770340Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.769772Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.785794Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.786195Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"last(x, y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"advanced-stations\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:05.798241Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:05.797643Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:05.810371Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:05.810843Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[TypeError] _first_obj() missing 1 required positional argument: 'x'\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    first()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/other.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"5ddd5613\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:45.939425Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:45.938609Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.866192Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.866581Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fdatar.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ itemgetter</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Itemgetter as a function for verb\\n\",\n       \"\\n\",\n       \"In datar expression, we can do:  \\n\",\n       \">>> arr = [1,2,3]  \\n\",\n       \">>> tibble(x=2) >> mutate(y=arr[f.x])  \\n\",\n       \"\\n\",\n       \"Since `arr[f.x]` won't compile. We need to use the `itemgetter` operator:  \\n\",\n       \">>> tibble(x=2) >> mutate(y=itemgetter(arr, f.x))  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: The data to be get items from  \\n\",\n       \"&emsp;&emsp;`subscr`: The subscripts  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ attrgetter</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Attrgetter as a function for verb\\n\",\n       \"\\n\",\n       \"This is helpful when we want to access to an accessor  \\n\",\n       \"(ie. CategoricalAccessor) from a SeriesGroupBy object  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pd_str</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Pandas' str accessor for a Series (x.str)\\n\",\n       \"\\n\",\n       \"This is helpful when x is a SeriesGroupBy object  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pd_cat</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Pandas' cat accessor for a Series (x.cat)\\n\",\n       \"\\n\",\n       \"This is helpful when x is a SeriesGroupBy object  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pd_dt</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Pandas' dt accessor for a Series (x.dt)\\n\",\n       \"\\n\",\n       \"This is helpful when x is a SeriesGroupBy object  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# datar specific\\n\",\n    \"\\n\",\n    \"import numpy\\n\",\n    \"from datar import f\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.base import as_date, factor, c\\n\",\n    \"from datar.other import *\\n\",\n    \"from datar.dplyr import mutate, group_by\\n\",\n    \"from datar.tibble import tibble\\n\",\n    \"\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"nb_header(\\n\",\n    \"    # get, \\n\",\n    \"    # flatten, \\n\",\n    \"    itemgetter, \\n\",\n    \"    attrgetter, \\n\",\n    \"    pd_str, \\n\",\n    \"    pd_cat, \\n\",\n    \"    pd_dt, \\n\",\n    \"    book='datar',\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"079671c5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.871734Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.871143Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.903396Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.903926Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# iris >> get(c[:5])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"ee9b5bd7\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.914499Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.913928Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.983390Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.984132Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# iris >> get(cols=f.Species)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"6a2638a7\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:46.989720Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:46.989062Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:46.992070Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:46.992928Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# select single element\\n\",\n    \"# iris >> get(1, f.Species)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"0b9835c1\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.002937Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.002274Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.005992Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.005544Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# get it as a single-element dataframe\\n\",\n    \"# iris >> get([1], f.Species)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"dceca6e4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.016728Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.016117Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.019537Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.019077Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"# or \\n\",\n    \"# iris >> get(1, [f.Species])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"62ed1ae9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.024658Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.024080Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.136793Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.137236Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"df = tibble(x=c[1:3], y=c[3:5])\\n\",\n    \"# df >> flatten()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"94649970\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:47.154788Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:47.154185Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:47.179272Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:47.179691Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>e</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y        a        b\\n\",\n       \"  <int64> <int64> <object> <object>\\n\",\n       \"0       1       3        b        d\\n\",\n       \"1       2       4        c        e\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"arr = numpy.array(['a', 'b', 'c', 'd', 'e'])\\n\",\n    \"# df >> mutate(a=arr[f.x], b=arr[f.y])  # Error\\n\",\n    \"df >> mutate(a=itemgetter(arr, f.x.values), b=itemgetter(arr, f.y.values))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"8056429c\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>abc</td>\\n\",\n       \"      <td>ABC</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>def</td>\\n\",\n       \"      <td>DEF</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x        a\\n\",\n       \"  <object> <object>\\n\",\n       \"0      abc      ABC\\n\",\n       \"1      def      DEF\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=[\\\"abc\\\", \\\"def\\\"])\\n\",\n    \"df >> mutate(a=attrgetter(f.x, 'str').upper())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"9b1726ad\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>abc</td>\\n\",\n       \"      <td>ABC</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>def</td>\\n\",\n       \"      <td>DEF</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x        a\\n\",\n       \"  <object> <object>\\n\",\n       \"0      abc      ABC\\n\",\n       \"1      def      DEF\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# or\\n\",\n    \"# df >> mutate(a=pd_str(f.x).upper())\\n\",\n    \"# or\\n\",\n    \"df >> mutate(a=f.x.str.upper())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"05d65cc8\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>abc</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>ab</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>def</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>de</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=2)\"\n      ],\n      \"text/plain\": [\n       \"         x       g        a\\n\",\n       \"  <object> <int64> <object>\\n\",\n       \"0      abc       1       ab\\n\",\n       \"1      def       2       de\\n\",\n       \"[TibbleGrouped: g (n=2)]\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# but when df is grouped\\n\",\n    \"gf = df >> group_by(g=[1, 2])\\n\",\n    \"# pd_str(gf.x)[:2].obj\\n\",\n    \"gf >> mutate(a=pd_str(gf.x)[:2])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"081a9d1e\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>month</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;datetime64[ns]&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2022-01-01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2022-12-02</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=2)\"\n      ],\n      \"text/plain\": [\n       \"                 x       g   month\\n\",\n       \"  <datetime64[ns]> <int64> <int64>\\n\",\n       \"0       2022-01-01       1       1\\n\",\n       \"1       2022-12-02       2      12\\n\",\n       \"[TibbleGrouped: g (n=2)]\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf = (\\n\",\n    \"    tibble(x=[\\\"2022-01-01\\\", \\\"2022-12-02\\\"])\\n\",\n    \"    >> mutate(x=as_date(f.x, format=\\\"%Y-%m-%d\\\"))\\n\",\n    \"    >> group_by(g=[1, 2])\\n\",\n    \")\\n\",\n    \"gf >> mutate(month=pd_dt(gf.x).month)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"id\": \"b2aaa7f0\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>codes</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int8&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=2)\"\n      ],\n      \"text/plain\": [\n       \"           x       g  codes\\n\",\n       \"  <category> <int64> <int8>\\n\",\n       \"0          1       1      0\\n\",\n       \"1          2       2      1\\n\",\n       \"[TibbleGrouped: g (n=2)]\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"gf = (\\n\",\n    \"    tibble(x=factor([1, 2], levels=[1, 2, 3]))\\n\",\n    \"    >> group_by(g=[1, 2])\\n\",\n    \")\\n\",\n    \"gf >> mutate(codes=pd_cat(gf.x).codes)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/pack.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.595610Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.594966Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.430759Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.431147Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fpack.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pack</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Makes df narrow by collapsing a set of columns into a single df-column.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`**cols`: Columns to pack  \\n\",\n       \"&emsp;&emsp;`_names_sep`: If `None`, the default, the names will be left as is.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Inner names will come from the former outer names  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If a string, the inner and outer names will be used together.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The names of the new outer columns will be formed by pasting  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;together the outer and the inner column names, separated by  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`_names_sep`.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ unpack</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Makes df wider by expanding df-columns back out into individual columns.\\n\",\n       \"\\n\",\n       \"For empty columns, the column is kept asis, instead of removing it.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame  \\n\",\n       \"&emsp;&emsp;`cols`: Columns to unpack  \\n\",\n       \"&emsp;&emsp;`names_sep`: If `None`, the default, the names will be left as is.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Inner names will come from the former outer names  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If a string, the inner and outer names will be used together.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The names of the new outer columns will be formed by pasting  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;together the outer and the inner column names, separated by  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;`_names_sep`.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Data frame with given columns unpacked.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(pack, unpack)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.439093Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.437591Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.582404Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.582851Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x1</th>\\n\",\n       \"      <th>x2</th>\\n\",\n       \"      <th>x3</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       x1      x2      x3       y\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       1       4       7       1\\n\",\n       \"1       2       5       8       2\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x1 = c[1:3], x2 = c[4:6], x3 = c[7:9], y = c[1:3])\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.623762Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.612492Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.687112Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.687525Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>x$x1</th>\\n\",\n       \"      <th>x$x2</th>\\n\",\n       \"      <th>x$x3</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        y    x$x1    x$x2    x$x3\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       1       1       4       7\\n\",\n       \"1       2       2       5       8\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> pack(x=starts_with('x'))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.703242Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.702526Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.710324Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.711080Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x$x1</th>\\n\",\n       \"      <th>x$x2</th>\\n\",\n       \"      <th>x$x3</th>\\n\",\n       \"      <th>y$y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     x$x1    x$x2    x$x3     y$y\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       1       4       7       1\\n\",\n       \"1       2       5       8       2\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> pack(x=c(f.x1, f.x2, f.x3), y=f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.736525Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.735912Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.742841Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.743497Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>Sepal$Length</th>\\n\",\n       \"      <th>Sepal$Width</th>\\n\",\n       \"      <th>Petal$Length</th>\\n\",\n       \"      <th>Petal$Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       Species  Sepal$Length  Sepal$Width  Petal$Length  Petal$Width\\n\",\n       \"      <object>     <float64>    <float64>     <float64>    <float64>\\n\",\n       \"0       setosa           5.1          3.5           1.4          0.2\\n\",\n       \"1       setosa           4.9          3.0           1.4          0.2\\n\",\n       \"2       setosa           4.7          3.2           1.3          0.2\\n\",\n       \"3       setosa           4.6          3.1           1.5          0.2\\n\",\n       \"..         ...           ...          ...           ...          ...\\n\",\n       \"4       setosa           5.0          3.6           1.4          0.2\\n\",\n       \"145  virginica           6.7          3.0           5.2          2.3\\n\",\n       \"146  virginica           6.3          2.5           5.0          1.9\\n\",\n       \"147  virginica           6.5          3.0           5.2          2.0\\n\",\n       \"148  virginica           6.2          3.4           5.4          2.3\\n\",\n       \"149  virginica           5.9          3.0           5.1          1.8\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> pack(\\n\",\n    \"    Sepal=starts_with(\\\"Sepal\\\"),\\n\",\n    \"    Petal=starts_with(\\\"Petal\\\"),\\n\",\n    \"    _names_sep=\\\"_\\\"\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.791974Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.791196Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.824763Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.825161Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y$a</th>\\n\",\n       \"      <th>y$b</th>\\n\",\n       \"      <th>z$X</th>\\n\",\n       \"      <th>z$Y</th>\\n\",\n       \"      <th>z$Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x     y$a     y$b      z$X       z$Y      z$Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Unpacking ===========================================================\\n\",\n    \"\\n\",\n    \"df = tibble(\\n\",\n    \"  x = c[1:4],\\n\",\n    \"  y = tibble(a = c[1:4], b = c[4:1]),\\n\",\n    \"  z = tibble(X = c(\\\"a\\\", \\\"b\\\", \\\"c\\\"), Y = runif(3), Z = c(TRUE, FALSE, NA))\\n\",\n    \")\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.848630Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.847790Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.896413Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.895768Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>z$X</th>\\n\",\n       \"      <th>z$Y</th>\\n\",\n       \"      <th>z$Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       a       b      z$X       z$Y      z$Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unpack(f.y)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.916193Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.915622Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.931037Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.931472Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>X</th>\\n\",\n       \"      <th>Y</th>\\n\",\n       \"      <th>Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       a       b        X         Y        Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unpack(c(f.y, f.z))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.947604Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.946968Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.954544Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.955047Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y_a</th>\\n\",\n       \"      <th>y_b</th>\\n\",\n       \"      <th>z_X</th>\\n\",\n       \"      <th>z_Y</th>\\n\",\n       \"      <th>z_Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x     y_a     y_b      z_X       z_Y      z_Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unpack(c(f.y, f.z), names_sep=\\\"_\\\")\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.965059Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.964492Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.970973Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.971380Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>X</th>\\n\",\n       \"      <th>Y</th>\\n\",\n       \"      <th>Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       a       b        X         Y        Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    # indexes from inner data frame counts\\n\",\n    \"    df >> unpack(c(2,3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.981674Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.981042Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.994499Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.995255Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>X</th>\\n\",\n       \"      <th>Y</th>\\n\",\n       \"      <th>Z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.286761</td>\\n\",\n       \"      <td>True</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.532775</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.497844</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       a       b        X         Y        Z\\n\",\n       \"  <int64> <int64> <int64> <object> <float64> <object>\\n\",\n       \"0       1       1       4        a  0.286761     True\\n\",\n       \"1       2       2       3        b  0.532775    False\\n\",\n       \"2       3       3       2        c  0.497844      NaN\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unpack(c(2,4))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.7.8 64-bit ('base': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/pivot_longer.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"6401a1db\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:18.775999Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:18.775210Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:19.789379Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:19.790261Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fpivot_longer.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pivot_longer</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \" \\\"lengthens\\\" data, increasing the number of rows and\\n\",\n       \"    decreasing the number of columns.\\n\",\n       \"\\n\",\n       \"    The row order is a bit different from `tidyr` and `pandas.DataFrame.melt`.\\n\",\n       \"        >>> df = tibble(x=c[1:2], y=c[3:4])\\n\",\n       \"        >>> pivot_longer(df, f[f.x:f.y])\\n\",\n       \"        >>> #    name   value\\n\",\n       \"        >>> # 0  x      1\\n\",\n       \"        >>> # 1  x      2\\n\",\n       \"        >>> # 2  y      3\\n\",\n       \"        >>> # 3  y      4\\n\",\n       \"    But with `tidyr::pivot_longer`, the output will be:\\n\",\n       \"        >>> # # A tibble: 4 x 2\\n\",\n       \"        >>> # name  value\\n\",\n       \"        >>> # <chr> <int>\\n\",\n       \"        >>> # 1 x   1\\n\",\n       \"        >>> # 2 y   3\\n\",\n       \"        >>> # 3 x   2\\n\",\n       \"        >>> # 4 y   4\\n\",\n       \"\\n\",\n       \"    Args:\\n\",\n       \"        _data: A data frame to pivot.\\n\",\n       \"        cols: Columns to pivot into longer format.\\n\",\n       \"        names_to: A string specifying the name of the column to create from\\n\",\n       \"            the data stored in the column names of data.\\n\",\n       \"            Can be a character vector, creating multiple columns, if names_sep\\n\",\n       \"            or names_pattern is provided. In this case, there are two special\\n\",\n       \"            values you can take advantage of:\\n\",\n       \"            - `None`/`NA`/`NULL` will discard that component of the name.\\n\",\n       \"            - `.value`/`_value` indicates that component of the name defines\\n\",\n       \"                the name of the column containing the cell values,\\n\",\n       \"                overriding values_to.\\n\",\n       \"            - Different as `tidyr`: With `.value`/`_value`, if there are other\\n\",\n       \"              parts of the names to distinguish the groups, they must be\\n\",\n       \"              captured. For example, use `r'(\\\\w)_(\\\\d)'` to match `'a_1'` and\\n\",\n       \"              `['.value', NA]` to discard the suffix, instead of use\\n\",\n       \"              `r'(\\\\w)_\\\\d'` to match.\\n\",\n       \"        names_prefix: A regular expression used to remove matching text from\\n\",\n       \"            the start of each variable name.\\n\",\n       \"        names_sep: and\\n\",\n       \"        names_pattern: If names_to contains multiple values,\\n\",\n       \"            these arguments control how the column name is broken up.\\n\",\n       \"            names_sep takes the same specification as separate(), and\\n\",\n       \"            can either be a numeric vector (specifying positions to break on),\\n\",\n       \"            or a single string (specifying a regular expression to split on).\\n\",\n       \"        names_pattern: takes the same specification as extract(),\\n\",\n       \"            a regular expression containing matching groups (()).\\n\",\n       \"        names_dtypes: and\\n\",\n       \"        values_dtypes: A list of column name-prototype pairs.\\n\",\n       \"            A prototype (or dtypes for short) is a zero-length vector\\n\",\n       \"            (like integer() or numeric()) that defines the type, class, and\\n\",\n       \"            attributes of a vector. Use these arguments if you want to confirm\\n\",\n       \"            that the created columns are the types that you expect.\\n\",\n       \"            Note that if you want to change (instead of confirm) the types\\n\",\n       \"            of specific columns, you should use names_transform or\\n\",\n       \"            values_transform instead.\\n\",\n       \"        names_transform: and\\n\",\n       \"        values_transform: A list of column name-function pairs.\\n\",\n       \"            Use these arguments if you need to change the types of\\n\",\n       \"            specific columns. For example,\\n\",\n       \"            names_transform = dict(week = as.integer) would convert a\\n\",\n       \"            character variable called week to an integer.\\n\",\n       \"            If not specified, the type of the columns generated from names_to\\n\",\n       \"            will be character, and the type of the variables generated from\\n\",\n       \"            values_to will be the common type of the input columns used to\\n\",\n       \"            generate them.\\n\",\n       \"        names_repair: Not supported yet.\\n\",\n       \"        values_to: A string specifying the name of the column to create from\\n\",\n       \"            the data stored in cell values. If names_to is a character\\n\",\n       \"            containing the special `.value`/`_value` sentinel, this value\\n\",\n       \"            will be ignored, and the name of the value column will be derived\\n\",\n       \"            from part of the existing column names.\\n\",\n       \"        values_drop_na: If TRUE, will drop rows that contain only NAs in\\n\",\n       \"            the value_to column. This effectively converts explicit missing\\n\",\n       \"            values to implicit missing values, and should generally be used\\n\",\n       \"            only when missing values in data were created by its structure.\\n\",\n       \"        names_repair: treatment of problematic column names:\\n\",\n       \"            - \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"            - \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"            - \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"                but check they are unique,\\n\",\n       \"            - \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"            - a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"    Returns:\\n\",\n       \"        The pivoted dataframe.\\n\",\n       \"    \"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/pivot_longer.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import relig_income, billboard, who, anscombe\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(pivot_longer)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"cde8ffb4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:19.810290Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:19.809669Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:19.819890Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:19.820268Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>religion</th>\\n\",\n       \"      <th>&lt;$10k</th>\\n\",\n       \"      <th>$10-20k</th>\\n\",\n       \"      <th>$20-30k</th>\\n\",\n       \"      <th>$30-40k</th>\\n\",\n       \"      <th>$40-50k</th>\\n\",\n       \"      <th>$50-75k</th>\\n\",\n       \"      <th>$75-100k</th>\\n\",\n       \"      <th>$100-150k</th>\\n\",\n       \"      <th>&gt;150k</th>\\n\",\n       \"      <th>Don't know/refused</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Agnostic</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>60</td>\\n\",\n       \"      <td>81</td>\\n\",\n       \"      <td>76</td>\\n\",\n       \"      <td>137</td>\\n\",\n       \"      <td>122</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>84</td>\\n\",\n       \"      <td>96</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Atheist</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>70</td>\\n\",\n       \"      <td>73</td>\\n\",\n       \"      <td>59</td>\\n\",\n       \"      <td>74</td>\\n\",\n       \"      <td>76</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Buddhist</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>58</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>54</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Catholic</td>\\n\",\n       \"      <td>418</td>\\n\",\n       \"      <td>617</td>\\n\",\n       \"      <td>732</td>\\n\",\n       \"      <td>670</td>\\n\",\n       \"      <td>638</td>\\n\",\n       \"      <td>1116</td>\\n\",\n       \"      <td>949</td>\\n\",\n       \"      <td>792</td>\\n\",\n       \"      <td>633</td>\\n\",\n       \"      <td>1489</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Don’t know/refused</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>116</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>Evangelical Prot</td>\\n\",\n       \"      <td>575</td>\\n\",\n       \"      <td>869</td>\\n\",\n       \"      <td>1064</td>\\n\",\n       \"      <td>982</td>\\n\",\n       \"      <td>881</td>\\n\",\n       \"      <td>1486</td>\\n\",\n       \"      <td>949</td>\\n\",\n       \"      <td>723</td>\\n\",\n       \"      <td>414</td>\\n\",\n       \"      <td>1529</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>Hindu</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>47</td>\\n\",\n       \"      <td>48</td>\\n\",\n       \"      <td>54</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>Historically Black Prot</td>\\n\",\n       \"      <td>228</td>\\n\",\n       \"      <td>244</td>\\n\",\n       \"      <td>236</td>\\n\",\n       \"      <td>238</td>\\n\",\n       \"      <td>197</td>\\n\",\n       \"      <td>223</td>\\n\",\n       \"      <td>131</td>\\n\",\n       \"      <td>81</td>\\n\",\n       \"      <td>78</td>\\n\",\n       \"      <td>339</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>Jehovah's Witness</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>37</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>Jewish</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>69</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"      <td>151</td>\\n\",\n       \"      <td>162</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>Mainline Prot</td>\\n\",\n       \"      <td>289</td>\\n\",\n       \"      <td>495</td>\\n\",\n       \"      <td>619</td>\\n\",\n       \"      <td>655</td>\\n\",\n       \"      <td>651</td>\\n\",\n       \"      <td>1107</td>\\n\",\n       \"      <td>939</td>\\n\",\n       \"      <td>753</td>\\n\",\n       \"      <td>634</td>\\n\",\n       \"      <td>1328</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>Mormon</td>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>48</td>\\n\",\n       \"      <td>51</td>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>112</td>\\n\",\n       \"      <td>85</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>69</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>Muslim</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>22</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>Orthodox</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>47</td>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>73</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>Other Christian</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>Other Faiths</td>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>63</td>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>41</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>Other World Religions</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>Unaffiliated</td>\\n\",\n       \"      <td>217</td>\\n\",\n       \"      <td>299</td>\\n\",\n       \"      <td>374</td>\\n\",\n       \"      <td>365</td>\\n\",\n       \"      <td>341</td>\\n\",\n       \"      <td>528</td>\\n\",\n       \"      <td>407</td>\\n\",\n       \"      <td>321</td>\\n\",\n       \"      <td>258</td>\\n\",\n       \"      <td>597</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                   religion   <$10k  $10-20k  $20-30k  $30-40k  $40-50k  \\\\\\n\",\n       \"                   <object> <int64>  <int64>  <int64>  <int64>  <int64>   \\n\",\n       \"0                  Agnostic      27       34       60       81       76   \\n\",\n       \"1                   Atheist      12       27       37       52       35   \\n\",\n       \"2                  Buddhist      27       21       30       34       33   \\n\",\n       \"3                  Catholic     418      617      732      670      638   \\n\",\n       \"4        Don’t know/refused      15       14       15       11       10   \\n\",\n       \"5          Evangelical Prot     575      869     1064      982      881   \\n\",\n       \"6                     Hindu       1        9        7        9       11   \\n\",\n       \"7   Historically Black Prot     228      244      236      238      197   \\n\",\n       \"8         Jehovah's Witness      20       27       24       24       21   \\n\",\n       \"9                    Jewish      19       19       25       25       30   \\n\",\n       \"10            Mainline Prot     289      495      619      655      651   \\n\",\n       \"11                   Mormon      29       40       48       51       56   \\n\",\n       \"12                   Muslim       6        7        9       10        9   \\n\",\n       \"13                 Orthodox      13       17       23       32       32   \\n\",\n       \"14          Other Christian       9        7       11       13       13   \\n\",\n       \"15             Other Faiths      20       33       40       46       49   \\n\",\n       \"16    Other World Religions       5        2        3        4        2   \\n\",\n       \"17             Unaffiliated     217      299      374      365      341   \\n\",\n       \"\\n\",\n       \"    $50-75k  $75-100k  $100-150k   >150k  Don't know/refused  \\n\",\n       \"    <int64>   <int64>    <int64> <int64>             <int64>  \\n\",\n       \"0       137       122        109      84                  96  \\n\",\n       \"1        70        73         59      74                  76  \\n\",\n       \"2        58        62         39      53                  54  \\n\",\n       \"3      1116       949        792     633                1489  \\n\",\n       \"4        35        21         17      18                 116  \\n\",\n       \"5      1486       949        723     414                1529  \\n\",\n       \"6        34        47         48      54                  37  \\n\",\n       \"7       223       131         81      78                 339  \\n\",\n       \"8        30        15         11       6                  37  \\n\",\n       \"9        95        69         87     151                 162  \\n\",\n       \"10     1107       939        753     634                1328  \\n\",\n       \"11      112        85         49      42                  69  \\n\",\n       \"12       23        16          8       6                  22  \\n\",\n       \"13       47        38         42      46                  73  \\n\",\n       \"14       14        18         14      12                  18  \\n\",\n       \"15       63        46         40      41                  71  \\n\",\n       \"16        7         3          4       4                   8  \\n\",\n       \"17      528       407        321     258                 597  \"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"relig_income\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"439f9d5c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:19.868234Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:19.867668Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.026238Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.026658Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>religion</th>\\n\",\n       \"      <th>income</th>\\n\",\n       \"      <th>count</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Agnostic</td>\\n\",\n       \"      <td>&lt;$10k</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Atheist</td>\\n\",\n       \"      <td>&lt;$10k</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Buddhist</td>\\n\",\n       \"      <td>&lt;$10k</td>\\n\",\n       \"      <td>27</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Catholic</td>\\n\",\n       \"      <td>&lt;$10k</td>\\n\",\n       \"      <td>418</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Don’t know/refused</td>\\n\",\n       \"      <td>&lt;$10k</td>\\n\",\n       \"      <td>15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>175</th>\\n\",\n       \"      <td>Orthodox</td>\\n\",\n       \"      <td>Don't know/refused</td>\\n\",\n       \"      <td>73</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>176</th>\\n\",\n       \"      <td>Other Christian</td>\\n\",\n       \"      <td>Don't know/refused</td>\\n\",\n       \"      <td>18</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>177</th>\\n\",\n       \"      <td>Other Faiths</td>\\n\",\n       \"      <td>Don't know/refused</td>\\n\",\n       \"      <td>71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>178</th>\\n\",\n       \"      <td>Other World Religions</td>\\n\",\n       \"      <td>Don't know/refused</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>179</th>\\n\",\n       \"      <td>Unaffiliated</td>\\n\",\n       \"      <td>Don't know/refused</td>\\n\",\n       \"      <td>597</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>180 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                  religion              income   count\\n\",\n       \"                  <object>            <object> <int64>\\n\",\n       \"0                 Agnostic               <$10k      27\\n\",\n       \"1                  Atheist               <$10k      12\\n\",\n       \"2                 Buddhist               <$10k      27\\n\",\n       \"3                 Catholic               <$10k     418\\n\",\n       \"..                     ...                 ...     ...\\n\",\n       \"4       Don’t know/refused               <$10k      15\\n\",\n       \"175               Orthodox  Don't know/refused      73\\n\",\n       \"176        Other Christian  Don't know/refused      18\\n\",\n       \"177           Other Faiths  Don't know/refused      71\\n\",\n       \"178  Other World Religions  Don't know/refused       8\\n\",\n       \"179           Unaffiliated  Don't know/refused     597\\n\",\n       \"\\n\",\n       \"[180 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"relig_income >> \\\\\\n\",\n    \"  pivot_longer(~f.religion, names_to=\\\"income\\\", values_to=\\\"count\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"3f770536\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.063860Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.063122Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.068837Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.069227Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>artist</th>\\n\",\n       \"      <th>track</th>\\n\",\n       \"      <th>date.entered</th>\\n\",\n       \"      <th>wk1</th>\\n\",\n       \"      <th>wk2</th>\\n\",\n       \"      <th>wk3</th>\\n\",\n       \"      <th>wk4</th>\\n\",\n       \"      <th>wk5</th>\\n\",\n       \"      <th>wk6</th>\\n\",\n       \"      <th>wk7</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th>wk67</th>\\n\",\n       \"      <th>wk68</th>\\n\",\n       \"      <th>wk69</th>\\n\",\n       \"      <th>wk70</th>\\n\",\n       \"      <th>wk71</th>\\n\",\n       \"      <th>wk72</th>\\n\",\n       \"      <th>wk73</th>\\n\",\n       \"      <th>wk74</th>\\n\",\n       \"      <th>wk75</th>\\n\",\n       \"      <th>wk76</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >...</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2 Pac</td>\\n\",\n       \"      <td>Baby Don't Cry (Keep...</td>\\n\",\n       \"      <td>2000-02-26</td>\\n\",\n       \"      <td>87</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>99.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2Ge+her</td>\\n\",\n       \"      <td>The Hardest Part Of ...</td>\\n\",\n       \"      <td>2000-09-02</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"      <td>92.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3 Doors Down</td>\\n\",\n       \"      <td>Kryptonite</td>\\n\",\n       \"      <td>2000-04-08</td>\\n\",\n       \"      <td>81</td>\\n\",\n       \"      <td>70.0</td>\\n\",\n       \"      <td>68.0</td>\\n\",\n       \"      <td>67.0</td>\\n\",\n       \"      <td>66.0</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"      <td>54.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3 Doors Down</td>\\n\",\n       \"      <td>Loser</td>\\n\",\n       \"      <td>2000-10-21</td>\\n\",\n       \"      <td>76</td>\\n\",\n       \"      <td>76.0</td>\\n\",\n       \"      <td>72.0</td>\\n\",\n       \"      <td>69.0</td>\\n\",\n       \"      <td>67.0</td>\\n\",\n       \"      <td>65.0</td>\\n\",\n       \"      <td>55.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>504 Boyz</td>\\n\",\n       \"      <td>Wobble Wobble</td>\\n\",\n       \"      <td>2000-04-15</td>\\n\",\n       \"      <td>57</td>\\n\",\n       \"      <td>34.0</td>\\n\",\n       \"      <td>25.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"      <td>31.0</td>\\n\",\n       \"      <td>36.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>312</th>\\n\",\n       \"      <td>Yankee Grey</td>\\n\",\n       \"      <td>Another Nine Minutes</td>\\n\",\n       \"      <td>2000-04-29</td>\\n\",\n       \"      <td>86</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>74.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>88.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>313</th>\\n\",\n       \"      <td>Yearwood, Trisha</td>\\n\",\n       \"      <td>Real Live Woman</td>\\n\",\n       \"      <td>2000-04-01</td>\\n\",\n       \"      <td>85</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>81.0</td>\\n\",\n       \"      <td>91.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>314</th>\\n\",\n       \"      <td>Ying Yang Twins</td>\\n\",\n       \"      <td>Whistle While You Tw...</td>\\n\",\n       \"      <td>2000-03-18</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>91.0</td>\\n\",\n       \"      <td>85.0</td>\\n\",\n       \"      <td>84.0</td>\\n\",\n       \"      <td>78.0</td>\\n\",\n       \"      <td>74.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>315</th>\\n\",\n       \"      <td>Zombie Nation</td>\\n\",\n       \"      <td>Kernkraft 400</td>\\n\",\n       \"      <td>2000-09-02</td>\\n\",\n       \"      <td>99</td>\\n\",\n       \"      <td>99.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>316</th>\\n\",\n       \"      <td>matchbox twenty</td>\\n\",\n       \"      <td>Bent</td>\\n\",\n       \"      <td>2000-04-29</td>\\n\",\n       \"      <td>60</td>\\n\",\n       \"      <td>37.0</td>\\n\",\n       \"      <td>29.0</td>\\n\",\n       \"      <td>24.0</td>\\n\",\n       \"      <td>22.0</td>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>18.0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>317 rows × 79 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"               artist                    track date.entered     wk1       wk2  \\\\\\n\",\n       \"             <object>                 <object>     <object> <int64> <float64>   \\n\",\n       \"0               2 Pac  Baby Don't Cry (Keep...   2000-02-26      87      82.0   \\n\",\n       \"1             2Ge+her  The Hardest Part Of ...   2000-09-02      91      87.0   \\n\",\n       \"2        3 Doors Down               Kryptonite   2000-04-08      81      70.0   \\n\",\n       \"3        3 Doors Down                    Loser   2000-10-21      76      76.0   \\n\",\n       \"..                ...                      ...          ...     ...       ...   \\n\",\n       \"4            504 Boyz            Wobble Wobble   2000-04-15      57      34.0   \\n\",\n       \"312       Yankee Grey     Another Nine Minutes   2000-04-29      86      83.0   \\n\",\n       \"313  Yearwood, Trisha          Real Live Woman   2000-04-01      85      83.0   \\n\",\n       \"314   Ying Yang Twins  Whistle While You Tw...   2000-03-18      95      94.0   \\n\",\n       \"315     Zombie Nation            Kernkraft 400   2000-09-02      99      99.0   \\n\",\n       \"316   matchbox twenty                     Bent   2000-04-29      60      37.0   \\n\",\n       \"\\n\",\n       \"          wk3       wk4       wk5       wk6       wk7  ...      wk67  \\\\\\n\",\n       \"    <float64> <float64> <float64> <float64> <float64>  ... <float64>   \\n\",\n       \"0        72.0      77.0      87.0      94.0      99.0  ...       NaN   \\n\",\n       \"1        92.0       NaN       NaN       NaN       NaN  ...       NaN   \\n\",\n       \"2        68.0      67.0      66.0      57.0      54.0  ...       NaN   \\n\",\n       \"3        72.0      69.0      67.0      65.0      55.0  ...       NaN   \\n\",\n       \"..        ...       ...       ...       ...       ...  ...       ...   \\n\",\n       \"4        25.0      17.0      17.0      31.0      36.0  ...       NaN   \\n\",\n       \"312      77.0      74.0      83.0      79.0      88.0  ...       NaN   \\n\",\n       \"313      83.0      82.0      81.0      91.0       NaN  ...       NaN   \\n\",\n       \"314      91.0      85.0      84.0      78.0      74.0  ...       NaN   \\n\",\n       \"315       NaN       NaN       NaN       NaN       NaN  ...       NaN   \\n\",\n       \"316      29.0      24.0      22.0      21.0      18.0            NaN   \\n\",\n       \"\\n\",\n       \"         wk68      wk69      wk70      wk71      wk72      wk73      wk74  \\\\\\n\",\n       \"    <float64> <float64> <float64> <float64> <float64> <float64> <float64>   \\n\",\n       \"0         NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"1         NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"2         NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"3         NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"..        ...       ...       ...       ...       ...       ...       ...   \\n\",\n       \"4         NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"312       NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"313       NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"314       NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"315       NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"316       NaN       NaN       NaN       NaN       NaN       NaN       NaN   \\n\",\n       \"\\n\",\n       \"         wk75      wk76  \\n\",\n       \"    <float64> <float64>  \\n\",\n       \"0         NaN       NaN  \\n\",\n       \"1         NaN       NaN  \\n\",\n       \"2         NaN       NaN  \\n\",\n       \"3         NaN       NaN  \\n\",\n       \"..        ...       ...  \\n\",\n       \"4         NaN       NaN  \\n\",\n       \"312       NaN       NaN  \\n\",\n       \"313       NaN       NaN  \\n\",\n       \"314       NaN       NaN  \\n\",\n       \"315       NaN       NaN  \\n\",\n       \"316       NaN       NaN  \\n\",\n       \"\\n\",\n       \"[317 rows x 79 columns]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"billboard\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"a84475c0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.082615Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.081826Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.141538Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.140761Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>artist</th>\\n\",\n       \"      <th>date.entered</th>\\n\",\n       \"      <th>track</th>\\n\",\n       \"      <th>week</th>\\n\",\n       \"      <th>rank</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2 Pac</td>\\n\",\n       \"      <td>2000-02-26</td>\\n\",\n       \"      <td>Baby Don't Cry (Keep...</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>87.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2Ge+her</td>\\n\",\n       \"      <td>2000-09-02</td>\\n\",\n       \"      <td>The Hardest Part Of ...</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>91.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3 Doors Down</td>\\n\",\n       \"      <td>2000-04-08</td>\\n\",\n       \"      <td>Kryptonite</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>81.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3 Doors Down</td>\\n\",\n       \"      <td>2000-10-21</td>\\n\",\n       \"      <td>Loser</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>76.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>504 Boyz</td>\\n\",\n       \"      <td>2000-04-15</td>\\n\",\n       \"      <td>Wobble Wobble</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>57.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19716</th>\\n\",\n       \"      <td>Creed</td>\\n\",\n       \"      <td>1999-09-11</td>\\n\",\n       \"      <td>Higher</td>\\n\",\n       \"      <td>63</td>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19833</th>\\n\",\n       \"      <td>Lonestar</td>\\n\",\n       \"      <td>1999-06-05</td>\\n\",\n       \"      <td>Amazed</td>\\n\",\n       \"      <td>63</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20033</th>\\n\",\n       \"      <td>Creed</td>\\n\",\n       \"      <td>1999-09-11</td>\\n\",\n       \"      <td>Higher</td>\\n\",\n       \"      <td>64</td>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20150</th>\\n\",\n       \"      <td>Lonestar</td>\\n\",\n       \"      <td>1999-06-05</td>\\n\",\n       \"      <td>Amazed</td>\\n\",\n       \"      <td>64</td>\\n\",\n       \"      <td>50.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20350</th>\\n\",\n       \"      <td>Creed</td>\\n\",\n       \"      <td>1999-09-11</td>\\n\",\n       \"      <td>Higher</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>5307 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"             artist date.entered                    track     week      rank\\n\",\n       \"           <object>     <object>                 <object> <object> <float64>\\n\",\n       \"0             2 Pac   2000-02-26  Baby Don't Cry (Keep...        1      87.0\\n\",\n       \"1           2Ge+her   2000-09-02  The Hardest Part Of ...        1      91.0\\n\",\n       \"2      3 Doors Down   2000-04-08               Kryptonite        1      81.0\\n\",\n       \"3      3 Doors Down   2000-10-21                    Loser        1      76.0\\n\",\n       \"...             ...          ...                      ...      ...       ...\\n\",\n       \"4          504 Boyz   2000-04-15            Wobble Wobble        1      57.0\\n\",\n       \"19716         Creed   1999-09-11                   Higher       63      50.0\\n\",\n       \"19833      Lonestar   1999-06-05                   Amazed       63      45.0\\n\",\n       \"20033         Creed   1999-09-11                   Higher       64      50.0\\n\",\n       \"20150      Lonestar   1999-06-05                   Amazed       64      50.0\\n\",\n       \"20350         Creed   1999-09-11                   Higher       65      49.0\\n\",\n       \"\\n\",\n       \"[5307 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"billboard >> \\\\\\n\",\n    \" pivot_longer(\\n\",\n    \"   cols = starts_with(\\\"wk\\\"),\\n\",\n    \"   names_to = \\\"week\\\",\\n\",\n    \"   names_prefix = \\\"wk\\\",\\n\",\n    \"   values_to = \\\"rank\\\",\\n\",\n    \"   values_drop_na = TRUE\\n\",\n    \" )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"8a289d74\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.166872Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.166271Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:22.170997Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:22.171392Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>country</th>\\n\",\n       \"      <th>iso2</th>\\n\",\n       \"      <th>iso3</th>\\n\",\n       \"      <th>newrel_f65</th>\\n\",\n       \"      <th>year</th>\\n\",\n       \"      <th>diagnosis</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>age</th>\\n\",\n       \"      <th>count</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Afghanistan</td>\\n\",\n       \"      <td>AF</td>\\n\",\n       \"      <td>AFG</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1980</td>\\n\",\n       \"      <td>sp</td>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>014</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Afghanistan</td>\\n\",\n       \"      <td>AF</td>\\n\",\n       \"      <td>AFG</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1981</td>\\n\",\n       \"      <td>sp</td>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>014</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Afghanistan</td>\\n\",\n       \"      <td>AF</td>\\n\",\n       \"      <td>AFG</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1982</td>\\n\",\n       \"      <td>sp</td>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>014</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Afghanistan</td>\\n\",\n       \"      <td>AF</td>\\n\",\n       \"      <td>AFG</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1983</td>\\n\",\n       \"      <td>sp</td>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>014</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Afghanistan</td>\\n\",\n       \"      <td>AF</td>\\n\",\n       \"      <td>AFG</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1984</td>\\n\",\n       \"      <td>sp</td>\\n\",\n       \"      <td>m</td>\\n\",\n       \"      <td>014</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>398195</th>\\n\",\n       \"      <td>Zimbabwe</td>\\n\",\n       \"      <td>ZW</td>\\n\",\n       \"      <td>ZWE</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2009</td>\\n\",\n       \"      <td>rel</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>5564</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>398196</th>\\n\",\n       \"      <td>Zimbabwe</td>\\n\",\n       \"      <td>ZW</td>\\n\",\n       \"      <td>ZWE</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2010</td>\\n\",\n       \"      <td>rel</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>5564</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>398197</th>\\n\",\n       \"      <td>Zimbabwe</td>\\n\",\n       \"      <td>ZW</td>\\n\",\n       \"      <td>ZWE</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2011</td>\\n\",\n       \"      <td>rel</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>5564</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>398198</th>\\n\",\n       \"      <td>Zimbabwe</td>\\n\",\n       \"      <td>ZW</td>\\n\",\n       \"      <td>ZWE</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2012</td>\\n\",\n       \"      <td>rel</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>5564</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>398199</th>\\n\",\n       \"      <td>Zimbabwe</td>\\n\",\n       \"      <td>ZW</td>\\n\",\n       \"      <td>ZWE</td>\\n\",\n       \"      <td>725.0</td>\\n\",\n       \"      <td>2013</td>\\n\",\n       \"      <td>rel</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>5564</td>\\n\",\n       \"      <td>811.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>398200 rows × 9 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"            country     iso2     iso3  newrel_f65    year diagnosis   gender  \\\\\\n\",\n       \"           <object> <object> <object>   <float64> <int64>  <object> <object>   \\n\",\n       \"0       Afghanistan       AF      AFG         NaN    1980        sp        m   \\n\",\n       \"1       Afghanistan       AF      AFG         NaN    1981        sp        m   \\n\",\n       \"2       Afghanistan       AF      AFG         NaN    1982        sp        m   \\n\",\n       \"3       Afghanistan       AF      AFG         NaN    1983        sp        m   \\n\",\n       \"...             ...      ...      ...         ...     ...       ...      ...   \\n\",\n       \"4       Afghanistan       AF      AFG         NaN    1984        sp        m   \\n\",\n       \"398195     Zimbabwe       ZW      ZWE         NaN    2009       rel        f   \\n\",\n       \"398196     Zimbabwe       ZW      ZWE         NaN    2010       rel        f   \\n\",\n       \"398197     Zimbabwe       ZW      ZWE         NaN    2011       rel        f   \\n\",\n       \"398198     Zimbabwe       ZW      ZWE         NaN    2012       rel        f   \\n\",\n       \"398199     Zimbabwe       ZW      ZWE       725.0    2013       rel        f   \\n\",\n       \"\\n\",\n       \"            age     count  \\n\",\n       \"       <object> <float64>  \\n\",\n       \"0           014       NaN  \\n\",\n       \"1           014       NaN  \\n\",\n       \"2           014       NaN  \\n\",\n       \"3           014       NaN  \\n\",\n       \"...         ...       ...  \\n\",\n       \"4           014       NaN  \\n\",\n       \"398195     5564       NaN  \\n\",\n       \"398196     5564       NaN  \\n\",\n       \"398197     5564       NaN  \\n\",\n       \"398198     5564       NaN  \\n\",\n       \"398199     5564     811.0  \\n\",\n       \"\\n\",\n       \"[398200 rows x 9 columns]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"who >> pivot_longer(\\n\",\n    \"  cols = f[f.new_sp_m014:f.newrel_f65],\\n\",\n    \"  names_to = c(\\\"diagnosis\\\", \\\"gender\\\", \\\"age\\\"),\\n\",\n    \"  names_pattern = r\\\"new_?(.*)_(.)(.*)\\\",\\n\",\n    \"  values_to = \\\"count\\\"\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"14c1a827\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:22.190872Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:22.190173Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:22.205577Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:22.205946Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x1</th>\\n\",\n       \"      <th>x2</th>\\n\",\n       \"      <th>x3</th>\\n\",\n       \"      <th>x4</th>\\n\",\n       \"      <th>y1</th>\\n\",\n       \"      <th>y2</th>\\n\",\n       \"      <th>y3</th>\\n\",\n       \"      <th>y4</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8.04</td>\\n\",\n       \"      <td>9.14</td>\\n\",\n       \"      <td>7.46</td>\\n\",\n       \"      <td>6.58</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>6.95</td>\\n\",\n       \"      <td>8.14</td>\\n\",\n       \"      <td>6.77</td>\\n\",\n       \"      <td>5.76</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>7.58</td>\\n\",\n       \"      <td>8.74</td>\\n\",\n       \"      <td>12.74</td>\\n\",\n       \"      <td>7.71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8.81</td>\\n\",\n       \"      <td>8.77</td>\\n\",\n       \"      <td>7.11</td>\\n\",\n       \"      <td>8.84</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>8.33</td>\\n\",\n       \"      <td>9.26</td>\\n\",\n       \"      <td>7.81</td>\\n\",\n       \"      <td>8.47</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>9.96</td>\\n\",\n       \"      <td>8.10</td>\\n\",\n       \"      <td>8.84</td>\\n\",\n       \"      <td>7.04</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>7.24</td>\\n\",\n       \"      <td>6.13</td>\\n\",\n       \"      <td>6.08</td>\\n\",\n       \"      <td>5.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>4.26</td>\\n\",\n       \"      <td>3.10</td>\\n\",\n       \"      <td>5.39</td>\\n\",\n       \"      <td>12.50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>10.84</td>\\n\",\n       \"      <td>9.13</td>\\n\",\n       \"      <td>8.15</td>\\n\",\n       \"      <td>5.56</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>4.82</td>\\n\",\n       \"      <td>7.26</td>\\n\",\n       \"      <td>6.42</td>\\n\",\n       \"      <td>7.91</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>5.68</td>\\n\",\n       \"      <td>4.74</td>\\n\",\n       \"      <td>5.73</td>\\n\",\n       \"      <td>6.89</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x1      x2      x3      x4        y1        y2        y3        y4\\n\",\n       \"   <int64> <int64> <int64> <int64> <float64> <float64> <float64> <float64>\\n\",\n       \"0       10      10      10       8      8.04      9.14      7.46      6.58\\n\",\n       \"1        8       8       8       8      6.95      8.14      6.77      5.76\\n\",\n       \"2       13      13      13       8      7.58      8.74     12.74      7.71\\n\",\n       \"3        9       9       9       8      8.81      8.77      7.11      8.84\\n\",\n       \"4       11      11      11       8      8.33      9.26      7.81      8.47\\n\",\n       \"5       14      14      14       8      9.96      8.10      8.84      7.04\\n\",\n       \"6        6       6       6       8      7.24      6.13      6.08      5.25\\n\",\n       \"7        4       4       4      19      4.26      3.10      5.39     12.50\\n\",\n       \"8       12      12      12       8     10.84      9.13      8.15      5.56\\n\",\n       \"9        7       7       7       8      4.82      7.26      6.42      7.91\\n\",\n       \"10       5       5       5       8      5.68      4.74      5.73      6.89\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"anscombe\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"30591069\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:22.300082Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:22.299515Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:22.427829Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:22.428279Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>set</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>8.04</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>9.14</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"      <td>7.46</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>6.58</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>6.95</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>8.14</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>6.77</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>5.76</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>7.58</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>8.74</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"      <td>12.74</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>7.71</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"      <td>8.81</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"      <td>8.77</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"      <td>7.11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>8.84</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>8.33</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>9.26</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"      <td>7.81</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>8.47</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"      <td>9.96</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"      <td>8.10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>14.0</td>\\n\",\n       \"      <td>8.84</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>7.04</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>7.24</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>6.13</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>6.08</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>5.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>4.26</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>3.10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>5.39</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>12.50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>10.84</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>9.13</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>12.0</td>\\n\",\n       \"      <td>8.15</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>5.56</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>4.82</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>7.26</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"      <td>6.42</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>7.91</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>5.68</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.74</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>5.73</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8.0</td>\\n\",\n       \"      <td>6.89</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        set         x         y\\n\",\n       \"   <object> <float64> <float64>\\n\",\n       \"0         1      10.0      8.04\\n\",\n       \"1         2      10.0      9.14\\n\",\n       \"2         3      10.0      7.46\\n\",\n       \"3         4       8.0      6.58\\n\",\n       \"4         1       8.0      6.95\\n\",\n       \"5         2       8.0      8.14\\n\",\n       \"6         3       8.0      6.77\\n\",\n       \"7         4       8.0      5.76\\n\",\n       \"8         1      13.0      7.58\\n\",\n       \"9         2      13.0      8.74\\n\",\n       \"10        3      13.0     12.74\\n\",\n       \"11        4       8.0      7.71\\n\",\n       \"12        1       9.0      8.81\\n\",\n       \"13        2       9.0      8.77\\n\",\n       \"14        3       9.0      7.11\\n\",\n       \"15        4       8.0      8.84\\n\",\n       \"16        1      11.0      8.33\\n\",\n       \"17        2      11.0      9.26\\n\",\n       \"18        3      11.0      7.81\\n\",\n       \"19        4       8.0      8.47\\n\",\n       \"20        1      14.0      9.96\\n\",\n       \"21        2      14.0      8.10\\n\",\n       \"22        3      14.0      8.84\\n\",\n       \"23        4       8.0      7.04\\n\",\n       \"24        1       6.0      7.24\\n\",\n       \"25        2       6.0      6.13\\n\",\n       \"26        3       6.0      6.08\\n\",\n       \"27        4       8.0      5.25\\n\",\n       \"28        1       4.0      4.26\\n\",\n       \"29        2       4.0      3.10\\n\",\n       \"30        3       4.0      5.39\\n\",\n       \"31        4      19.0     12.50\\n\",\n       \"32        1      12.0     10.84\\n\",\n       \"33        2      12.0      9.13\\n\",\n       \"34        3      12.0      8.15\\n\",\n       \"35        4       8.0      5.56\\n\",\n       \"36        1       7.0      4.82\\n\",\n       \"37        2       7.0      7.26\\n\",\n       \"38        3       7.0      6.42\\n\",\n       \"39        4       8.0      7.91\\n\",\n       \"40        1       5.0      5.68\\n\",\n       \"41        2       5.0      4.74\\n\",\n       \"42        3       5.0      5.73\\n\",\n       \"43        4       8.0      6.89\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"anscombe >> \\\\\\n\",\n    \" pivot_longer(everything(),\\n\",\n    \"   names_to = c(\\\".value\\\", \\\"set\\\"),\\n\",\n    \"   names_pattern = r\\\"(.)(.)\\\"\\n\",\n    \" )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"7117e082\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/pivot_wider.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"weekly-pavilion\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:49.588782Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:49.587741Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.557794Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.558214Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fpivot_wider.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pivot_wider</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \" \\\"widens\\\" data, increasing the number of columns and decreasing\\n\",\n       \"    the number of rows.\\n\",\n       \"\\n\",\n       \"    Args:\\n\",\n       \"        _data: A data frame to pivot.\\n\",\n       \"        id_cols: A set of columns that uniquely identifies each observation.\\n\",\n       \"            Defaults to all columns in data except for the columns specified\\n\",\n       \"            in names_from and values_from.\\n\",\n       \"        names_from: and\\n\",\n       \"        values_from: A pair of arguments describing which column\\n\",\n       \"            (or columns) to get the name of the output column (names_from),\\n\",\n       \"            and which column (or columns) to get the cell values from\\n\",\n       \"            (values_from).\\n\",\n       \"        names_prefix: String added to the start of every variable name.\\n\",\n       \"        names_sep: If names_from or values_from contains multiple variables,\\n\",\n       \"            this will be used to join their values together into a single\\n\",\n       \"            string to use as a column name.\\n\",\n       \"        names_glue: Instead of names_sep and names_prefix, you can supply\\n\",\n       \"            a glue specification that uses the names_from columns\\n\",\n       \"            (and special _value) to create custom column names.\\n\",\n       \"        names_sort: Should the column names be sorted? If FALSE, the default,\\n\",\n       \"            column names are ordered by first appearance.\\n\",\n       \"        names_repair: todo\\n\",\n       \"        values_fill: Optionally, a (scalar) value that specifies what\\n\",\n       \"            each value should be filled in with when missing.\\n\",\n       \"        values_fn: Optionally, a function applied to the value in each cell\\n\",\n       \"            in the output. You will typically use this when the combination\\n\",\n       \"            of `id_cols` and value column does not uniquely identify\\n\",\n       \"            an observation.\\n\",\n       \"            This can be a dict you want to apply different aggregations to\\n\",\n       \"            different value columns.\\n\",\n       \"            If not specified, will be `numpy.mean`\\n\",\n       \"\\n\",\n       \"    Returns:\\n\",\n       \"        The pivoted dataframe.\\n\",\n       \"    \"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/pivot_wider.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import fish_encounters, us_rent_income, warpbreaks \\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(pivot_wider)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"recognized-stuart\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.572185Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.571512Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.580526Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.580942Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>fish</th>\\n\",\n       \"      <th>station</th>\\n\",\n       \"      <th>seen</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>Release</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>I80_1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>Lisbon</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>Rstr</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>Base_TD</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>109</th>\\n\",\n       \"      <td>4864</td>\\n\",\n       \"      <td>Release</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>110</th>\\n\",\n       \"      <td>4864</td>\\n\",\n       \"      <td>I80_1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>111</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>Release</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>112</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>I80_1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>113</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>Lisbon</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>114 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       fish  station    seen\\n\",\n       \"    <int64> <object> <int64>\\n\",\n       \"0      4842  Release       1\\n\",\n       \"1      4842    I80_1       1\\n\",\n       \"2      4842   Lisbon       1\\n\",\n       \"3      4842     Rstr       1\\n\",\n       \"..      ...      ...     ...\\n\",\n       \"4      4842  Base_TD       1\\n\",\n       \"109    4864  Release       1\\n\",\n       \"110    4864    I80_1       1\\n\",\n       \"111    4865  Release       1\\n\",\n       \"112    4865    I80_1       1\\n\",\n       \"113    4865   Lisbon       1\\n\",\n       \"\\n\",\n       \"[114 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fish_encounters\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"drawn-empire\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.699989Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.699422Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.800575Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.800954Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>fish</th>\\n\",\n       \"      <th>BCE</th>\\n\",\n       \"      <th>BCE2</th>\\n\",\n       \"      <th>BCW</th>\\n\",\n       \"      <th>BCW2</th>\\n\",\n       \"      <th>Base_TD</th>\\n\",\n       \"      <th>I80_1</th>\\n\",\n       \"      <th>Lisbon</th>\\n\",\n       \"      <th>MAE</th>\\n\",\n       \"      <th>MAW</th>\\n\",\n       \"      <th>Release</th>\\n\",\n       \"      <th>Rstr</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4843</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4844</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4845</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4847</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>4848</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>4849</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>4850</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4851</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>4854</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>4855</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>4857</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>4858</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4859</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>4861</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>4862</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>4863</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>4864</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      fish       BCE      BCE2       BCW      BCW2   Base_TD     I80_1  \\\\\\n\",\n       \"   <int64> <float64> <float64> <float64> <float64> <float64> <float64>   \\n\",\n       \"0     4842       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"1     4843       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"2     4844       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"3     4845       NaN       NaN       NaN       NaN       1.0       1.0   \\n\",\n       \"4     4847       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"5     4848       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"6     4849       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"7     4850       1.0       NaN       1.0       NaN       1.0       1.0   \\n\",\n       \"8     4851       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"9     4854       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"10    4855       NaN       NaN       NaN       NaN       1.0       1.0   \\n\",\n       \"11    4857       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"12    4858       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"13    4859       NaN       NaN       NaN       NaN       1.0       1.0   \\n\",\n       \"14    4861       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"15    4862       1.0       1.0       1.0       1.0       1.0       1.0   \\n\",\n       \"16    4863       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"17    4864       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"18    4865       NaN       NaN       NaN       NaN       NaN       1.0   \\n\",\n       \"\\n\",\n       \"      Lisbon       MAE       MAW   Release      Rstr  \\n\",\n       \"   <float64> <float64> <float64> <float64> <float64>  \\n\",\n       \"0        1.0       1.0       1.0       1.0       1.0  \\n\",\n       \"1        1.0       1.0       1.0       1.0       1.0  \\n\",\n       \"2        1.0       1.0       1.0       1.0       1.0  \\n\",\n       \"3        1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"4        1.0       NaN       NaN       1.0       NaN  \\n\",\n       \"5        1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"6        NaN       NaN       NaN       1.0       NaN  \\n\",\n       \"7        NaN       NaN       NaN       1.0       1.0  \\n\",\n       \"8        NaN       NaN       NaN       1.0       NaN  \\n\",\n       \"9        NaN       NaN       NaN       1.0       NaN  \\n\",\n       \"10       1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"11       1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"12       1.0       1.0       1.0       1.0       1.0  \\n\",\n       \"13       1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"14       1.0       1.0       1.0       1.0       1.0  \\n\",\n       \"15       1.0       NaN       NaN       1.0       1.0  \\n\",\n       \"16       NaN       NaN       NaN       1.0       NaN  \\n\",\n       \"17       NaN       NaN       NaN       1.0       NaN  \\n\",\n       \"18       1.0       NaN       NaN       1.0       NaN  \"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fish_encounters >> \\\\\\n\",\n    \"  pivot_wider(names_from=f.station, values_from=f.seen)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"prompt-geneva\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.848972Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.847524Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.860460Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.861007Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>fish</th>\\n\",\n       \"      <th>BCE</th>\\n\",\n       \"      <th>BCE2</th>\\n\",\n       \"      <th>BCW</th>\\n\",\n       \"      <th>BCW2</th>\\n\",\n       \"      <th>Base_TD</th>\\n\",\n       \"      <th>I80_1</th>\\n\",\n       \"      <th>Lisbon</th>\\n\",\n       \"      <th>MAE</th>\\n\",\n       \"      <th>MAW</th>\\n\",\n       \"      <th>Release</th>\\n\",\n       \"      <th>Rstr</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4842</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4843</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4844</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4845</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4847</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>4848</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>4849</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>4850</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>4851</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>4854</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>4855</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>4857</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>4858</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>4859</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>4861</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>4862</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>4863</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>4864</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>4865</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      fish     BCE    BCE2     BCW    BCW2  Base_TD   I80_1  Lisbon     MAE  \\\\\\n\",\n       \"   <int64> <int64> <int64> <int64> <int64>  <int64> <int64> <int64> <int64>   \\n\",\n       \"0     4842       1       1       1       1        1       1       1       1   \\n\",\n       \"1     4843       1       1       1       1        1       1       1       1   \\n\",\n       \"2     4844       1       1       1       1        1       1       1       1   \\n\",\n       \"3     4845       0       0       0       0        1       1       1       0   \\n\",\n       \"4     4847       0       0       0       0        0       1       1       0   \\n\",\n       \"5     4848       0       0       0       0        0       1       1       0   \\n\",\n       \"6     4849       0       0       0       0        0       1       0       0   \\n\",\n       \"7     4850       1       0       1       0        1       1       0       0   \\n\",\n       \"8     4851       0       0       0       0        0       1       0       0   \\n\",\n       \"9     4854       0       0       0       0        0       1       0       0   \\n\",\n       \"10    4855       0       0       0       0        1       1       1       0   \\n\",\n       \"11    4857       1       1       1       1        1       1       1       0   \\n\",\n       \"12    4858       1       1       1       1        1       1       1       1   \\n\",\n       \"13    4859       0       0       0       0        1       1       1       0   \\n\",\n       \"14    4861       1       1       1       1        1       1       1       1   \\n\",\n       \"15    4862       1       1       1       1        1       1       1       0   \\n\",\n       \"16    4863       0       0       0       0        0       1       0       0   \\n\",\n       \"17    4864       0       0       0       0        0       1       0       0   \\n\",\n       \"18    4865       0       0       0       0        0       1       1       0   \\n\",\n       \"\\n\",\n       \"       MAW  Release    Rstr  \\n\",\n       \"   <int64>  <int64> <int64>  \\n\",\n       \"0        1        1       1  \\n\",\n       \"1        1        1       1  \\n\",\n       \"2        1        1       1  \\n\",\n       \"3        0        1       1  \\n\",\n       \"4        0        1       0  \\n\",\n       \"5        0        1       1  \\n\",\n       \"6        0        1       0  \\n\",\n       \"7        0        1       1  \\n\",\n       \"8        0        1       0  \\n\",\n       \"9        0        1       0  \\n\",\n       \"10       0        1       1  \\n\",\n       \"11       0        1       1  \\n\",\n       \"12       1        1       1  \\n\",\n       \"13       0        1       1  \\n\",\n       \"14       1        1       1  \\n\",\n       \"15       0        1       1  \\n\",\n       \"16       0        1       0  \\n\",\n       \"17       0        1       0  \\n\",\n       \"18       0        1       0  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"fish_encounters >> \\\\\\n\",\n    \"  pivot_wider(names_from=f.station, values_from=f.seen, values_fill=0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"spanish-classics\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.884228Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.883639Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.907988Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.907167Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>GEOID</th>\\n\",\n       \"      <th>NAME</th>\\n\",\n       \"      <th>variable</th>\\n\",\n       \"      <th>estimate</th>\\n\",\n       \"      <th>moe</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Alabama</td>\\n\",\n       \"      <td>income</td>\\n\",\n       \"      <td>24476.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Alabama</td>\\n\",\n       \"      <td>rent</td>\\n\",\n       \"      <td>747.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Alaska</td>\\n\",\n       \"      <td>income</td>\\n\",\n       \"      <td>32940.0</td>\\n\",\n       \"      <td>508.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Alaska</td>\\n\",\n       \"      <td>rent</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Arizona</td>\\n\",\n       \"      <td>income</td>\\n\",\n       \"      <td>27517.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>55</td>\\n\",\n       \"      <td>Wisconsin</td>\\n\",\n       \"      <td>rent</td>\\n\",\n       \"      <td>813.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100</th>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>Wyoming</td>\\n\",\n       \"      <td>income</td>\\n\",\n       \"      <td>30854.0</td>\\n\",\n       \"      <td>342.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>101</th>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>Wyoming</td>\\n\",\n       \"      <td>rent</td>\\n\",\n       \"      <td>828.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>102</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>Puerto Rico</td>\\n\",\n       \"      <td>income</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>103</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>Puerto Rico</td>\\n\",\n       \"      <td>rent</td>\\n\",\n       \"      <td>464.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>104 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      GEOID         NAME variable  estimate       moe\\n\",\n       \"    <int64>     <object> <object> <float64> <float64>\\n\",\n       \"0         1      Alabama   income   24476.0     136.0\\n\",\n       \"1         1      Alabama     rent     747.0       3.0\\n\",\n       \"2         2       Alaska   income   32940.0     508.0\\n\",\n       \"3         2       Alaska     rent    1200.0      13.0\\n\",\n       \"..      ...          ...      ...       ...       ...\\n\",\n       \"4         4      Arizona   income   27517.0     148.0\\n\",\n       \"99       55    Wisconsin     rent     813.0       3.0\\n\",\n       \"100      56      Wyoming   income   30854.0     342.0\\n\",\n       \"101      56      Wyoming     rent     828.0      11.0\\n\",\n       \"102      72  Puerto Rico   income       NaN       NaN\\n\",\n       \"103      72  Puerto Rico     rent     464.0       6.0\\n\",\n       \"\\n\",\n       \"[104 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"us_rent_income\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"antique-winner\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:50.965105Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:50.964273Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:50.970893Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:50.971248Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>GEOID</th>\\n\",\n       \"      <th>NAME</th>\\n\",\n       \"      <th>estimate_income</th>\\n\",\n       \"      <th>estimate_rent</th>\\n\",\n       \"      <th>moe_income</th>\\n\",\n       \"      <th>moe_rent</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Alabama</td>\\n\",\n       \"      <td>24476.0</td>\\n\",\n       \"      <td>747.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Alaska</td>\\n\",\n       \"      <td>32940.0</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>508.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Arizona</td>\\n\",\n       \"      <td>27517.0</td>\\n\",\n       \"      <td>972.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>Arkansas</td>\\n\",\n       \"      <td>23789.0</td>\\n\",\n       \"      <td>709.0</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>California</td>\\n\",\n       \"      <td>29454.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>Colorado</td>\\n\",\n       \"      <td>32401.0</td>\\n\",\n       \"      <td>1125.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>Connecticut</td>\\n\",\n       \"      <td>35326.0</td>\\n\",\n       \"      <td>1123.0</td>\\n\",\n       \"      <td>195.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>Delaware</td>\\n\",\n       \"      <td>31560.0</td>\\n\",\n       \"      <td>1076.0</td>\\n\",\n       \"      <td>247.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>District of Columbia</td>\\n\",\n       \"      <td>43198.0</td>\\n\",\n       \"      <td>1424.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>Florida</td>\\n\",\n       \"      <td>25952.0</td>\\n\",\n       \"      <td>1077.0</td>\\n\",\n       \"      <td>70.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>Georgia</td>\\n\",\n       \"      <td>27024.0</td>\\n\",\n       \"      <td>927.0</td>\\n\",\n       \"      <td>106.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>Hawaii</td>\\n\",\n       \"      <td>32453.0</td>\\n\",\n       \"      <td>1507.0</td>\\n\",\n       \"      <td>218.0</td>\\n\",\n       \"      <td>18.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>Idaho</td>\\n\",\n       \"      <td>25298.0</td>\\n\",\n       \"      <td>792.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>Illinois</td>\\n\",\n       \"      <td>30684.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>Indiana</td>\\n\",\n       \"      <td>27247.0</td>\\n\",\n       \"      <td>782.0</td>\\n\",\n       \"      <td>117.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>Iowa</td>\\n\",\n       \"      <td>30002.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>143.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>Kansas</td>\\n\",\n       \"      <td>29126.0</td>\\n\",\n       \"      <td>801.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>Kentucky</td>\\n\",\n       \"      <td>24702.0</td>\\n\",\n       \"      <td>713.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>Louisiana</td>\\n\",\n       \"      <td>25086.0</td>\\n\",\n       \"      <td>825.0</td>\\n\",\n       \"      <td>155.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>Maine</td>\\n\",\n       \"      <td>26841.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>187.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>Maryland</td>\\n\",\n       \"      <td>37147.0</td>\\n\",\n       \"      <td>1311.0</td>\\n\",\n       \"      <td>152.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>Massachusetts</td>\\n\",\n       \"      <td>34498.0</td>\\n\",\n       \"      <td>1173.0</td>\\n\",\n       \"      <td>199.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>Michigan</td>\\n\",\n       \"      <td>26987.0</td>\\n\",\n       \"      <td>824.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>Minnesota</td>\\n\",\n       \"      <td>32734.0</td>\\n\",\n       \"      <td>906.0</td>\\n\",\n       \"      <td>189.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>Mississippi</td>\\n\",\n       \"      <td>22766.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>194.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>Missouri</td>\\n\",\n       \"      <td>26999.0</td>\\n\",\n       \"      <td>784.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>Montana</td>\\n\",\n       \"      <td>26249.0</td>\\n\",\n       \"      <td>751.0</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>Nebraska</td>\\n\",\n       \"      <td>30020.0</td>\\n\",\n       \"      <td>773.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>Nevada</td>\\n\",\n       \"      <td>29019.0</td>\\n\",\n       \"      <td>1017.0</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>New Hampshire</td>\\n\",\n       \"      <td>33172.0</td>\\n\",\n       \"      <td>1052.0</td>\\n\",\n       \"      <td>387.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>New Jersey</td>\\n\",\n       \"      <td>35075.0</td>\\n\",\n       \"      <td>1249.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>New Mexico</td>\\n\",\n       \"      <td>24457.0</td>\\n\",\n       \"      <td>809.0</td>\\n\",\n       \"      <td>214.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>New York</td>\\n\",\n       \"      <td>31057.0</td>\\n\",\n       \"      <td>1194.0</td>\\n\",\n       \"      <td>69.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>North Carolina</td>\\n\",\n       \"      <td>26482.0</td>\\n\",\n       \"      <td>844.0</td>\\n\",\n       \"      <td>111.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>North Dakota</td>\\n\",\n       \"      <td>32336.0</td>\\n\",\n       \"      <td>775.0</td>\\n\",\n       \"      <td>245.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>Ohio</td>\\n\",\n       \"      <td>27435.0</td>\\n\",\n       \"      <td>764.0</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>Oklahoma</td>\\n\",\n       \"      <td>26207.0</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>101.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>41</td>\\n\",\n       \"      <td>Oregon</td>\\n\",\n       \"      <td>27389.0</td>\\n\",\n       \"      <td>988.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>Pennsylvania</td>\\n\",\n       \"      <td>28923.0</td>\\n\",\n       \"      <td>885.0</td>\\n\",\n       \"      <td>119.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>Rhode Island</td>\\n\",\n       \"      <td>30210.0</td>\\n\",\n       \"      <td>957.0</td>\\n\",\n       \"      <td>259.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>South Carolina</td>\\n\",\n       \"      <td>25454.0</td>\\n\",\n       \"      <td>836.0</td>\\n\",\n       \"      <td>123.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>South Dakota</td>\\n\",\n       \"      <td>28821.0</td>\\n\",\n       \"      <td>696.0</td>\\n\",\n       \"      <td>276.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>47</td>\\n\",\n       \"      <td>Tennessee</td>\\n\",\n       \"      <td>25453.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>48</td>\\n\",\n       \"      <td>Texas</td>\\n\",\n       \"      <td>28063.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>Utah</td>\\n\",\n       \"      <td>27928.0</td>\\n\",\n       \"      <td>948.0</td>\\n\",\n       \"      <td>239.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>50</td>\\n\",\n       \"      <td>Vermont</td>\\n\",\n       \"      <td>29351.0</td>\\n\",\n       \"      <td>945.0</td>\\n\",\n       \"      <td>361.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>51</td>\\n\",\n       \"      <td>Virginia</td>\\n\",\n       \"      <td>32545.0</td>\\n\",\n       \"      <td>1166.0</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>Washington</td>\\n\",\n       \"      <td>32318.0</td>\\n\",\n       \"      <td>1120.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>54</td>\\n\",\n       \"      <td>West Virginia</td>\\n\",\n       \"      <td>23707.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>203.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>55</td>\\n\",\n       \"      <td>Wisconsin</td>\\n\",\n       \"      <td>29868.0</td>\\n\",\n       \"      <td>813.0</td>\\n\",\n       \"      <td>135.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>Wyoming</td>\\n\",\n       \"      <td>30854.0</td>\\n\",\n       \"      <td>828.0</td>\\n\",\n       \"      <td>342.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>Puerto Rico</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>464.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     GEOID                  NAME  estimate_income  estimate_rent  moe_income  \\\\\\n\",\n       \"   <int64>              <object>        <float64>      <float64>   <float64>   \\n\",\n       \"0        1               Alabama          24476.0          747.0       136.0   \\n\",\n       \"1        2                Alaska          32940.0         1200.0       508.0   \\n\",\n       \"2        4               Arizona          27517.0          972.0       148.0   \\n\",\n       \"3        5              Arkansas          23789.0          709.0       165.0   \\n\",\n       \"4        6            California          29454.0         1358.0       109.0   \\n\",\n       \"5        8              Colorado          32401.0         1125.0       109.0   \\n\",\n       \"6        9           Connecticut          35326.0         1123.0       195.0   \\n\",\n       \"7       10              Delaware          31560.0         1076.0       247.0   \\n\",\n       \"8       11  District of Columbia          43198.0         1424.0       681.0   \\n\",\n       \"9       12               Florida          25952.0         1077.0        70.0   \\n\",\n       \"10      13               Georgia          27024.0          927.0       106.0   \\n\",\n       \"11      15                Hawaii          32453.0         1507.0       218.0   \\n\",\n       \"12      16                 Idaho          25298.0          792.0       208.0   \\n\",\n       \"13      17              Illinois          30684.0          952.0        83.0   \\n\",\n       \"14      18               Indiana          27247.0          782.0       117.0   \\n\",\n       \"15      19                  Iowa          30002.0          740.0       143.0   \\n\",\n       \"16      20                Kansas          29126.0          801.0       208.0   \\n\",\n       \"17      21              Kentucky          24702.0          713.0       159.0   \\n\",\n       \"18      22             Louisiana          25086.0          825.0       155.0   \\n\",\n       \"19      23                 Maine          26841.0          808.0       187.0   \\n\",\n       \"20      24              Maryland          37147.0         1311.0       152.0   \\n\",\n       \"21      25         Massachusetts          34498.0         1173.0       199.0   \\n\",\n       \"22      26              Michigan          26987.0          824.0        82.0   \\n\",\n       \"23      27             Minnesota          32734.0          906.0       189.0   \\n\",\n       \"24      28           Mississippi          22766.0          740.0       194.0   \\n\",\n       \"25      29              Missouri          26999.0          784.0       113.0   \\n\",\n       \"26      30               Montana          26249.0          751.0       206.0   \\n\",\n       \"27      31              Nebraska          30020.0          773.0       146.0   \\n\",\n       \"28      32                Nevada          29019.0         1017.0       213.0   \\n\",\n       \"29      33         New Hampshire          33172.0         1052.0       387.0   \\n\",\n       \"30      34            New Jersey          35075.0         1249.0       148.0   \\n\",\n       \"31      35            New Mexico          24457.0          809.0       214.0   \\n\",\n       \"32      36              New York          31057.0         1194.0        69.0   \\n\",\n       \"33      37        North Carolina          26482.0          844.0       111.0   \\n\",\n       \"34      38          North Dakota          32336.0          775.0       245.0   \\n\",\n       \"35      39                  Ohio          27435.0          764.0        94.0   \\n\",\n       \"36      40              Oklahoma          26207.0          766.0       101.0   \\n\",\n       \"37      41                Oregon          27389.0          988.0       146.0   \\n\",\n       \"38      42          Pennsylvania          28923.0          885.0       119.0   \\n\",\n       \"39      44          Rhode Island          30210.0          957.0       259.0   \\n\",\n       \"40      45        South Carolina          25454.0          836.0       123.0   \\n\",\n       \"41      46          South Dakota          28821.0          696.0       276.0   \\n\",\n       \"42      47             Tennessee          25453.0          808.0       102.0   \\n\",\n       \"43      48                 Texas          28063.0          952.0       110.0   \\n\",\n       \"44      49                  Utah          27928.0          948.0       239.0   \\n\",\n       \"45      50               Vermont          29351.0          945.0       361.0   \\n\",\n       \"46      51              Virginia          32545.0         1166.0       202.0   \\n\",\n       \"47      53            Washington          32318.0         1120.0       113.0   \\n\",\n       \"48      54         West Virginia          23707.0          681.0       203.0   \\n\",\n       \"49      55             Wisconsin          29868.0          813.0       135.0   \\n\",\n       \"50      56               Wyoming          30854.0          828.0       342.0   \\n\",\n       \"51      72           Puerto Rico              NaN          464.0         NaN   \\n\",\n       \"\\n\",\n       \"    moe_rent  \\n\",\n       \"   <float64>  \\n\",\n       \"0        3.0  \\n\",\n       \"1       13.0  \\n\",\n       \"2        4.0  \\n\",\n       \"3        5.0  \\n\",\n       \"4        3.0  \\n\",\n       \"5        5.0  \\n\",\n       \"6        5.0  \\n\",\n       \"7       10.0  \\n\",\n       \"8       17.0  \\n\",\n       \"9        3.0  \\n\",\n       \"10       3.0  \\n\",\n       \"11      18.0  \\n\",\n       \"12       7.0  \\n\",\n       \"13       3.0  \\n\",\n       \"14       3.0  \\n\",\n       \"15       4.0  \\n\",\n       \"16       5.0  \\n\",\n       \"17       4.0  \\n\",\n       \"18       4.0  \\n\",\n       \"19       7.0  \\n\",\n       \"20       5.0  \\n\",\n       \"21       5.0  \\n\",\n       \"22       3.0  \\n\",\n       \"23       4.0  \\n\",\n       \"24       5.0  \\n\",\n       \"25       4.0  \\n\",\n       \"26       9.0  \\n\",\n       \"27       4.0  \\n\",\n       \"28       6.0  \\n\",\n       \"29       9.0  \\n\",\n       \"30       4.0  \\n\",\n       \"31       6.0  \\n\",\n       \"32       3.0  \\n\",\n       \"33       3.0  \\n\",\n       \"34       9.0  \\n\",\n       \"35       2.0  \\n\",\n       \"36       3.0  \\n\",\n       \"37       4.0  \\n\",\n       \"38       3.0  \\n\",\n       \"39       6.0  \\n\",\n       \"40       4.0  \\n\",\n       \"41       7.0  \\n\",\n       \"42       4.0  \\n\",\n       \"43       2.0  \\n\",\n       \"44       6.0  \\n\",\n       \"45      11.0  \\n\",\n       \"46       5.0  \\n\",\n       \"47       4.0  \\n\",\n       \"48       6.0  \\n\",\n       \"49       3.0  \\n\",\n       \"50      11.0  \\n\",\n       \"51       6.0  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"us_rent_income >> \\\\\\n\",\n    \"  pivot_wider(names_from=f.variable, values_from=c(f.estimate, f.moe))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"offensive-listening\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.019461Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.018923Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.026318Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.026706Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>GEOID</th>\\n\",\n       \"      <th>NAME</th>\\n\",\n       \"      <th>estimate.income</th>\\n\",\n       \"      <th>estimate.rent</th>\\n\",\n       \"      <th>moe.income</th>\\n\",\n       \"      <th>moe.rent</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Alabama</td>\\n\",\n       \"      <td>24476.0</td>\\n\",\n       \"      <td>747.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Alaska</td>\\n\",\n       \"      <td>32940.0</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>508.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Arizona</td>\\n\",\n       \"      <td>27517.0</td>\\n\",\n       \"      <td>972.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>Arkansas</td>\\n\",\n       \"      <td>23789.0</td>\\n\",\n       \"      <td>709.0</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>California</td>\\n\",\n       \"      <td>29454.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>Colorado</td>\\n\",\n       \"      <td>32401.0</td>\\n\",\n       \"      <td>1125.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>Connecticut</td>\\n\",\n       \"      <td>35326.0</td>\\n\",\n       \"      <td>1123.0</td>\\n\",\n       \"      <td>195.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>Delaware</td>\\n\",\n       \"      <td>31560.0</td>\\n\",\n       \"      <td>1076.0</td>\\n\",\n       \"      <td>247.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>District of Columbia</td>\\n\",\n       \"      <td>43198.0</td>\\n\",\n       \"      <td>1424.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>Florida</td>\\n\",\n       \"      <td>25952.0</td>\\n\",\n       \"      <td>1077.0</td>\\n\",\n       \"      <td>70.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>Georgia</td>\\n\",\n       \"      <td>27024.0</td>\\n\",\n       \"      <td>927.0</td>\\n\",\n       \"      <td>106.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>Hawaii</td>\\n\",\n       \"      <td>32453.0</td>\\n\",\n       \"      <td>1507.0</td>\\n\",\n       \"      <td>218.0</td>\\n\",\n       \"      <td>18.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>Idaho</td>\\n\",\n       \"      <td>25298.0</td>\\n\",\n       \"      <td>792.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>Illinois</td>\\n\",\n       \"      <td>30684.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>Indiana</td>\\n\",\n       \"      <td>27247.0</td>\\n\",\n       \"      <td>782.0</td>\\n\",\n       \"      <td>117.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>Iowa</td>\\n\",\n       \"      <td>30002.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>143.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>Kansas</td>\\n\",\n       \"      <td>29126.0</td>\\n\",\n       \"      <td>801.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>Kentucky</td>\\n\",\n       \"      <td>24702.0</td>\\n\",\n       \"      <td>713.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>Louisiana</td>\\n\",\n       \"      <td>25086.0</td>\\n\",\n       \"      <td>825.0</td>\\n\",\n       \"      <td>155.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>Maine</td>\\n\",\n       \"      <td>26841.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>187.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>Maryland</td>\\n\",\n       \"      <td>37147.0</td>\\n\",\n       \"      <td>1311.0</td>\\n\",\n       \"      <td>152.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>Massachusetts</td>\\n\",\n       \"      <td>34498.0</td>\\n\",\n       \"      <td>1173.0</td>\\n\",\n       \"      <td>199.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>Michigan</td>\\n\",\n       \"      <td>26987.0</td>\\n\",\n       \"      <td>824.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>Minnesota</td>\\n\",\n       \"      <td>32734.0</td>\\n\",\n       \"      <td>906.0</td>\\n\",\n       \"      <td>189.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>Mississippi</td>\\n\",\n       \"      <td>22766.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>194.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>Missouri</td>\\n\",\n       \"      <td>26999.0</td>\\n\",\n       \"      <td>784.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>Montana</td>\\n\",\n       \"      <td>26249.0</td>\\n\",\n       \"      <td>751.0</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>Nebraska</td>\\n\",\n       \"      <td>30020.0</td>\\n\",\n       \"      <td>773.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>Nevada</td>\\n\",\n       \"      <td>29019.0</td>\\n\",\n       \"      <td>1017.0</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>New Hampshire</td>\\n\",\n       \"      <td>33172.0</td>\\n\",\n       \"      <td>1052.0</td>\\n\",\n       \"      <td>387.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>New Jersey</td>\\n\",\n       \"      <td>35075.0</td>\\n\",\n       \"      <td>1249.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>New Mexico</td>\\n\",\n       \"      <td>24457.0</td>\\n\",\n       \"      <td>809.0</td>\\n\",\n       \"      <td>214.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>New York</td>\\n\",\n       \"      <td>31057.0</td>\\n\",\n       \"      <td>1194.0</td>\\n\",\n       \"      <td>69.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>North Carolina</td>\\n\",\n       \"      <td>26482.0</td>\\n\",\n       \"      <td>844.0</td>\\n\",\n       \"      <td>111.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>North Dakota</td>\\n\",\n       \"      <td>32336.0</td>\\n\",\n       \"      <td>775.0</td>\\n\",\n       \"      <td>245.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>Ohio</td>\\n\",\n       \"      <td>27435.0</td>\\n\",\n       \"      <td>764.0</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>Oklahoma</td>\\n\",\n       \"      <td>26207.0</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>101.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>41</td>\\n\",\n       \"      <td>Oregon</td>\\n\",\n       \"      <td>27389.0</td>\\n\",\n       \"      <td>988.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>Pennsylvania</td>\\n\",\n       \"      <td>28923.0</td>\\n\",\n       \"      <td>885.0</td>\\n\",\n       \"      <td>119.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>Rhode Island</td>\\n\",\n       \"      <td>30210.0</td>\\n\",\n       \"      <td>957.0</td>\\n\",\n       \"      <td>259.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>South Carolina</td>\\n\",\n       \"      <td>25454.0</td>\\n\",\n       \"      <td>836.0</td>\\n\",\n       \"      <td>123.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>South Dakota</td>\\n\",\n       \"      <td>28821.0</td>\\n\",\n       \"      <td>696.0</td>\\n\",\n       \"      <td>276.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>47</td>\\n\",\n       \"      <td>Tennessee</td>\\n\",\n       \"      <td>25453.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>48</td>\\n\",\n       \"      <td>Texas</td>\\n\",\n       \"      <td>28063.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>Utah</td>\\n\",\n       \"      <td>27928.0</td>\\n\",\n       \"      <td>948.0</td>\\n\",\n       \"      <td>239.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>50</td>\\n\",\n       \"      <td>Vermont</td>\\n\",\n       \"      <td>29351.0</td>\\n\",\n       \"      <td>945.0</td>\\n\",\n       \"      <td>361.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>51</td>\\n\",\n       \"      <td>Virginia</td>\\n\",\n       \"      <td>32545.0</td>\\n\",\n       \"      <td>1166.0</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>Washington</td>\\n\",\n       \"      <td>32318.0</td>\\n\",\n       \"      <td>1120.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>54</td>\\n\",\n       \"      <td>West Virginia</td>\\n\",\n       \"      <td>23707.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>203.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>55</td>\\n\",\n       \"      <td>Wisconsin</td>\\n\",\n       \"      <td>29868.0</td>\\n\",\n       \"      <td>813.0</td>\\n\",\n       \"      <td>135.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>Wyoming</td>\\n\",\n       \"      <td>30854.0</td>\\n\",\n       \"      <td>828.0</td>\\n\",\n       \"      <td>342.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>Puerto Rico</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>464.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     GEOID                  NAME  estimate.income  estimate.rent  moe.income  \\\\\\n\",\n       \"   <int64>              <object>        <float64>      <float64>   <float64>   \\n\",\n       \"0        1               Alabama          24476.0          747.0       136.0   \\n\",\n       \"1        2                Alaska          32940.0         1200.0       508.0   \\n\",\n       \"2        4               Arizona          27517.0          972.0       148.0   \\n\",\n       \"3        5              Arkansas          23789.0          709.0       165.0   \\n\",\n       \"4        6            California          29454.0         1358.0       109.0   \\n\",\n       \"5        8              Colorado          32401.0         1125.0       109.0   \\n\",\n       \"6        9           Connecticut          35326.0         1123.0       195.0   \\n\",\n       \"7       10              Delaware          31560.0         1076.0       247.0   \\n\",\n       \"8       11  District of Columbia          43198.0         1424.0       681.0   \\n\",\n       \"9       12               Florida          25952.0         1077.0        70.0   \\n\",\n       \"10      13               Georgia          27024.0          927.0       106.0   \\n\",\n       \"11      15                Hawaii          32453.0         1507.0       218.0   \\n\",\n       \"12      16                 Idaho          25298.0          792.0       208.0   \\n\",\n       \"13      17              Illinois          30684.0          952.0        83.0   \\n\",\n       \"14      18               Indiana          27247.0          782.0       117.0   \\n\",\n       \"15      19                  Iowa          30002.0          740.0       143.0   \\n\",\n       \"16      20                Kansas          29126.0          801.0       208.0   \\n\",\n       \"17      21              Kentucky          24702.0          713.0       159.0   \\n\",\n       \"18      22             Louisiana          25086.0          825.0       155.0   \\n\",\n       \"19      23                 Maine          26841.0          808.0       187.0   \\n\",\n       \"20      24              Maryland          37147.0         1311.0       152.0   \\n\",\n       \"21      25         Massachusetts          34498.0         1173.0       199.0   \\n\",\n       \"22      26              Michigan          26987.0          824.0        82.0   \\n\",\n       \"23      27             Minnesota          32734.0          906.0       189.0   \\n\",\n       \"24      28           Mississippi          22766.0          740.0       194.0   \\n\",\n       \"25      29              Missouri          26999.0          784.0       113.0   \\n\",\n       \"26      30               Montana          26249.0          751.0       206.0   \\n\",\n       \"27      31              Nebraska          30020.0          773.0       146.0   \\n\",\n       \"28      32                Nevada          29019.0         1017.0       213.0   \\n\",\n       \"29      33         New Hampshire          33172.0         1052.0       387.0   \\n\",\n       \"30      34            New Jersey          35075.0         1249.0       148.0   \\n\",\n       \"31      35            New Mexico          24457.0          809.0       214.0   \\n\",\n       \"32      36              New York          31057.0         1194.0        69.0   \\n\",\n       \"33      37        North Carolina          26482.0          844.0       111.0   \\n\",\n       \"34      38          North Dakota          32336.0          775.0       245.0   \\n\",\n       \"35      39                  Ohio          27435.0          764.0        94.0   \\n\",\n       \"36      40              Oklahoma          26207.0          766.0       101.0   \\n\",\n       \"37      41                Oregon          27389.0          988.0       146.0   \\n\",\n       \"38      42          Pennsylvania          28923.0          885.0       119.0   \\n\",\n       \"39      44          Rhode Island          30210.0          957.0       259.0   \\n\",\n       \"40      45        South Carolina          25454.0          836.0       123.0   \\n\",\n       \"41      46          South Dakota          28821.0          696.0       276.0   \\n\",\n       \"42      47             Tennessee          25453.0          808.0       102.0   \\n\",\n       \"43      48                 Texas          28063.0          952.0       110.0   \\n\",\n       \"44      49                  Utah          27928.0          948.0       239.0   \\n\",\n       \"45      50               Vermont          29351.0          945.0       361.0   \\n\",\n       \"46      51              Virginia          32545.0         1166.0       202.0   \\n\",\n       \"47      53            Washington          32318.0         1120.0       113.0   \\n\",\n       \"48      54         West Virginia          23707.0          681.0       203.0   \\n\",\n       \"49      55             Wisconsin          29868.0          813.0       135.0   \\n\",\n       \"50      56               Wyoming          30854.0          828.0       342.0   \\n\",\n       \"51      72           Puerto Rico              NaN          464.0         NaN   \\n\",\n       \"\\n\",\n       \"    moe.rent  \\n\",\n       \"   <float64>  \\n\",\n       \"0        3.0  \\n\",\n       \"1       13.0  \\n\",\n       \"2        4.0  \\n\",\n       \"3        5.0  \\n\",\n       \"4        3.0  \\n\",\n       \"5        5.0  \\n\",\n       \"6        5.0  \\n\",\n       \"7       10.0  \\n\",\n       \"8       17.0  \\n\",\n       \"9        3.0  \\n\",\n       \"10       3.0  \\n\",\n       \"11      18.0  \\n\",\n       \"12       7.0  \\n\",\n       \"13       3.0  \\n\",\n       \"14       3.0  \\n\",\n       \"15       4.0  \\n\",\n       \"16       5.0  \\n\",\n       \"17       4.0  \\n\",\n       \"18       4.0  \\n\",\n       \"19       7.0  \\n\",\n       \"20       5.0  \\n\",\n       \"21       5.0  \\n\",\n       \"22       3.0  \\n\",\n       \"23       4.0  \\n\",\n       \"24       5.0  \\n\",\n       \"25       4.0  \\n\",\n       \"26       9.0  \\n\",\n       \"27       4.0  \\n\",\n       \"28       6.0  \\n\",\n       \"29       9.0  \\n\",\n       \"30       4.0  \\n\",\n       \"31       6.0  \\n\",\n       \"32       3.0  \\n\",\n       \"33       3.0  \\n\",\n       \"34       9.0  \\n\",\n       \"35       2.0  \\n\",\n       \"36       3.0  \\n\",\n       \"37       4.0  \\n\",\n       \"38       3.0  \\n\",\n       \"39       6.0  \\n\",\n       \"40       4.0  \\n\",\n       \"41       7.0  \\n\",\n       \"42       4.0  \\n\",\n       \"43       2.0  \\n\",\n       \"44       6.0  \\n\",\n       \"45      11.0  \\n\",\n       \"46       5.0  \\n\",\n       \"47       4.0  \\n\",\n       \"48       6.0  \\n\",\n       \"49       3.0  \\n\",\n       \"50      11.0  \\n\",\n       \"51       6.0  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"us_rent_income >> \\\\\\n\",\n    \"  pivot_wider(\\n\",\n    \"    names_from=f.variable,\\n\",\n    \"    names_sep=\\\".\\\",\\n\",\n    \"    values_from=c(f.estimate, f.moe)\\n\",\n    \"  )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"active-private\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.088298Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.087226Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.107507Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.107976Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>GEOID</th>\\n\",\n       \"      <th>NAME</th>\\n\",\n       \"      <th>income_estimate</th>\\n\",\n       \"      <th>rent_estimate</th>\\n\",\n       \"      <th>income_moe</th>\\n\",\n       \"      <th>rent_moe</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>Alabama</td>\\n\",\n       \"      <td>24476.0</td>\\n\",\n       \"      <td>747.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>Alaska</td>\\n\",\n       \"      <td>32940.0</td>\\n\",\n       \"      <td>1200.0</td>\\n\",\n       \"      <td>508.0</td>\\n\",\n       \"      <td>13.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>Arizona</td>\\n\",\n       \"      <td>27517.0</td>\\n\",\n       \"      <td>972.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>Arkansas</td>\\n\",\n       \"      <td>23789.0</td>\\n\",\n       \"      <td>709.0</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>California</td>\\n\",\n       \"      <td>29454.0</td>\\n\",\n       \"      <td>1358.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>Colorado</td>\\n\",\n       \"      <td>32401.0</td>\\n\",\n       \"      <td>1125.0</td>\\n\",\n       \"      <td>109.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>Connecticut</td>\\n\",\n       \"      <td>35326.0</td>\\n\",\n       \"      <td>1123.0</td>\\n\",\n       \"      <td>195.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>Delaware</td>\\n\",\n       \"      <td>31560.0</td>\\n\",\n       \"      <td>1076.0</td>\\n\",\n       \"      <td>247.0</td>\\n\",\n       \"      <td>10.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>11</td>\\n\",\n       \"      <td>District of Columbia</td>\\n\",\n       \"      <td>43198.0</td>\\n\",\n       \"      <td>1424.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>17.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>Florida</td>\\n\",\n       \"      <td>25952.0</td>\\n\",\n       \"      <td>1077.0</td>\\n\",\n       \"      <td>70.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>Georgia</td>\\n\",\n       \"      <td>27024.0</td>\\n\",\n       \"      <td>927.0</td>\\n\",\n       \"      <td>106.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>Hawaii</td>\\n\",\n       \"      <td>32453.0</td>\\n\",\n       \"      <td>1507.0</td>\\n\",\n       \"      <td>218.0</td>\\n\",\n       \"      <td>18.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>Idaho</td>\\n\",\n       \"      <td>25298.0</td>\\n\",\n       \"      <td>792.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>Illinois</td>\\n\",\n       \"      <td>30684.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>83.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>Indiana</td>\\n\",\n       \"      <td>27247.0</td>\\n\",\n       \"      <td>782.0</td>\\n\",\n       \"      <td>117.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>Iowa</td>\\n\",\n       \"      <td>30002.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>143.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>Kansas</td>\\n\",\n       \"      <td>29126.0</td>\\n\",\n       \"      <td>801.0</td>\\n\",\n       \"      <td>208.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>Kentucky</td>\\n\",\n       \"      <td>24702.0</td>\\n\",\n       \"      <td>713.0</td>\\n\",\n       \"      <td>159.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>22</td>\\n\",\n       \"      <td>Louisiana</td>\\n\",\n       \"      <td>25086.0</td>\\n\",\n       \"      <td>825.0</td>\\n\",\n       \"      <td>155.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>23</td>\\n\",\n       \"      <td>Maine</td>\\n\",\n       \"      <td>26841.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>187.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>Maryland</td>\\n\",\n       \"      <td>37147.0</td>\\n\",\n       \"      <td>1311.0</td>\\n\",\n       \"      <td>152.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>Massachusetts</td>\\n\",\n       \"      <td>34498.0</td>\\n\",\n       \"      <td>1173.0</td>\\n\",\n       \"      <td>199.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>Michigan</td>\\n\",\n       \"      <td>26987.0</td>\\n\",\n       \"      <td>824.0</td>\\n\",\n       \"      <td>82.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>Minnesota</td>\\n\",\n       \"      <td>32734.0</td>\\n\",\n       \"      <td>906.0</td>\\n\",\n       \"      <td>189.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>Mississippi</td>\\n\",\n       \"      <td>22766.0</td>\\n\",\n       \"      <td>740.0</td>\\n\",\n       \"      <td>194.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>Missouri</td>\\n\",\n       \"      <td>26999.0</td>\\n\",\n       \"      <td>784.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>Montana</td>\\n\",\n       \"      <td>26249.0</td>\\n\",\n       \"      <td>751.0</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>Nebraska</td>\\n\",\n       \"      <td>30020.0</td>\\n\",\n       \"      <td>773.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>32</td>\\n\",\n       \"      <td>Nevada</td>\\n\",\n       \"      <td>29019.0</td>\\n\",\n       \"      <td>1017.0</td>\\n\",\n       \"      <td>213.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>33</td>\\n\",\n       \"      <td>New Hampshire</td>\\n\",\n       \"      <td>33172.0</td>\\n\",\n       \"      <td>1052.0</td>\\n\",\n       \"      <td>387.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>34</td>\\n\",\n       \"      <td>New Jersey</td>\\n\",\n       \"      <td>35075.0</td>\\n\",\n       \"      <td>1249.0</td>\\n\",\n       \"      <td>148.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>New Mexico</td>\\n\",\n       \"      <td>24457.0</td>\\n\",\n       \"      <td>809.0</td>\\n\",\n       \"      <td>214.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>New York</td>\\n\",\n       \"      <td>31057.0</td>\\n\",\n       \"      <td>1194.0</td>\\n\",\n       \"      <td>69.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>37</td>\\n\",\n       \"      <td>North Carolina</td>\\n\",\n       \"      <td>26482.0</td>\\n\",\n       \"      <td>844.0</td>\\n\",\n       \"      <td>111.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>38</td>\\n\",\n       \"      <td>North Dakota</td>\\n\",\n       \"      <td>32336.0</td>\\n\",\n       \"      <td>775.0</td>\\n\",\n       \"      <td>245.0</td>\\n\",\n       \"      <td>9.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>Ohio</td>\\n\",\n       \"      <td>27435.0</td>\\n\",\n       \"      <td>764.0</td>\\n\",\n       \"      <td>94.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>40</td>\\n\",\n       \"      <td>Oklahoma</td>\\n\",\n       \"      <td>26207.0</td>\\n\",\n       \"      <td>766.0</td>\\n\",\n       \"      <td>101.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>41</td>\\n\",\n       \"      <td>Oregon</td>\\n\",\n       \"      <td>27389.0</td>\\n\",\n       \"      <td>988.0</td>\\n\",\n       \"      <td>146.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>Pennsylvania</td>\\n\",\n       \"      <td>28923.0</td>\\n\",\n       \"      <td>885.0</td>\\n\",\n       \"      <td>119.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>Rhode Island</td>\\n\",\n       \"      <td>30210.0</td>\\n\",\n       \"      <td>957.0</td>\\n\",\n       \"      <td>259.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>45</td>\\n\",\n       \"      <td>South Carolina</td>\\n\",\n       \"      <td>25454.0</td>\\n\",\n       \"      <td>836.0</td>\\n\",\n       \"      <td>123.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>46</td>\\n\",\n       \"      <td>South Dakota</td>\\n\",\n       \"      <td>28821.0</td>\\n\",\n       \"      <td>696.0</td>\\n\",\n       \"      <td>276.0</td>\\n\",\n       \"      <td>7.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>47</td>\\n\",\n       \"      <td>Tennessee</td>\\n\",\n       \"      <td>25453.0</td>\\n\",\n       \"      <td>808.0</td>\\n\",\n       \"      <td>102.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>48</td>\\n\",\n       \"      <td>Texas</td>\\n\",\n       \"      <td>28063.0</td>\\n\",\n       \"      <td>952.0</td>\\n\",\n       \"      <td>110.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>49</td>\\n\",\n       \"      <td>Utah</td>\\n\",\n       \"      <td>27928.0</td>\\n\",\n       \"      <td>948.0</td>\\n\",\n       \"      <td>239.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>50</td>\\n\",\n       \"      <td>Vermont</td>\\n\",\n       \"      <td>29351.0</td>\\n\",\n       \"      <td>945.0</td>\\n\",\n       \"      <td>361.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>51</td>\\n\",\n       \"      <td>Virginia</td>\\n\",\n       \"      <td>32545.0</td>\\n\",\n       \"      <td>1166.0</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>53</td>\\n\",\n       \"      <td>Washington</td>\\n\",\n       \"      <td>32318.0</td>\\n\",\n       \"      <td>1120.0</td>\\n\",\n       \"      <td>113.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>54</td>\\n\",\n       \"      <td>West Virginia</td>\\n\",\n       \"      <td>23707.0</td>\\n\",\n       \"      <td>681.0</td>\\n\",\n       \"      <td>203.0</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>55</td>\\n\",\n       \"      <td>Wisconsin</td>\\n\",\n       \"      <td>29868.0</td>\\n\",\n       \"      <td>813.0</td>\\n\",\n       \"      <td>135.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>56</td>\\n\",\n       \"      <td>Wyoming</td>\\n\",\n       \"      <td>30854.0</td>\\n\",\n       \"      <td>828.0</td>\\n\",\n       \"      <td>342.0</td>\\n\",\n       \"      <td>11.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>72</td>\\n\",\n       \"      <td>Puerto Rico</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>464.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     GEOID                  NAME  income_estimate  rent_estimate  income_moe  \\\\\\n\",\n       \"   <int64>              <object>        <float64>      <float64>   <float64>   \\n\",\n       \"0        1               Alabama          24476.0          747.0       136.0   \\n\",\n       \"1        2                Alaska          32940.0         1200.0       508.0   \\n\",\n       \"2        4               Arizona          27517.0          972.0       148.0   \\n\",\n       \"3        5              Arkansas          23789.0          709.0       165.0   \\n\",\n       \"4        6            California          29454.0         1358.0       109.0   \\n\",\n       \"5        8              Colorado          32401.0         1125.0       109.0   \\n\",\n       \"6        9           Connecticut          35326.0         1123.0       195.0   \\n\",\n       \"7       10              Delaware          31560.0         1076.0       247.0   \\n\",\n       \"8       11  District of Columbia          43198.0         1424.0       681.0   \\n\",\n       \"9       12               Florida          25952.0         1077.0        70.0   \\n\",\n       \"10      13               Georgia          27024.0          927.0       106.0   \\n\",\n       \"11      15                Hawaii          32453.0         1507.0       218.0   \\n\",\n       \"12      16                 Idaho          25298.0          792.0       208.0   \\n\",\n       \"13      17              Illinois          30684.0          952.0        83.0   \\n\",\n       \"14      18               Indiana          27247.0          782.0       117.0   \\n\",\n       \"15      19                  Iowa          30002.0          740.0       143.0   \\n\",\n       \"16      20                Kansas          29126.0          801.0       208.0   \\n\",\n       \"17      21              Kentucky          24702.0          713.0       159.0   \\n\",\n       \"18      22             Louisiana          25086.0          825.0       155.0   \\n\",\n       \"19      23                 Maine          26841.0          808.0       187.0   \\n\",\n       \"20      24              Maryland          37147.0         1311.0       152.0   \\n\",\n       \"21      25         Massachusetts          34498.0         1173.0       199.0   \\n\",\n       \"22      26              Michigan          26987.0          824.0        82.0   \\n\",\n       \"23      27             Minnesota          32734.0          906.0       189.0   \\n\",\n       \"24      28           Mississippi          22766.0          740.0       194.0   \\n\",\n       \"25      29              Missouri          26999.0          784.0       113.0   \\n\",\n       \"26      30               Montana          26249.0          751.0       206.0   \\n\",\n       \"27      31              Nebraska          30020.0          773.0       146.0   \\n\",\n       \"28      32                Nevada          29019.0         1017.0       213.0   \\n\",\n       \"29      33         New Hampshire          33172.0         1052.0       387.0   \\n\",\n       \"30      34            New Jersey          35075.0         1249.0       148.0   \\n\",\n       \"31      35            New Mexico          24457.0          809.0       214.0   \\n\",\n       \"32      36              New York          31057.0         1194.0        69.0   \\n\",\n       \"33      37        North Carolina          26482.0          844.0       111.0   \\n\",\n       \"34      38          North Dakota          32336.0          775.0       245.0   \\n\",\n       \"35      39                  Ohio          27435.0          764.0        94.0   \\n\",\n       \"36      40              Oklahoma          26207.0          766.0       101.0   \\n\",\n       \"37      41                Oregon          27389.0          988.0       146.0   \\n\",\n       \"38      42          Pennsylvania          28923.0          885.0       119.0   \\n\",\n       \"39      44          Rhode Island          30210.0          957.0       259.0   \\n\",\n       \"40      45        South Carolina          25454.0          836.0       123.0   \\n\",\n       \"41      46          South Dakota          28821.0          696.0       276.0   \\n\",\n       \"42      47             Tennessee          25453.0          808.0       102.0   \\n\",\n       \"43      48                 Texas          28063.0          952.0       110.0   \\n\",\n       \"44      49                  Utah          27928.0          948.0       239.0   \\n\",\n       \"45      50               Vermont          29351.0          945.0       361.0   \\n\",\n       \"46      51              Virginia          32545.0         1166.0       202.0   \\n\",\n       \"47      53            Washington          32318.0         1120.0       113.0   \\n\",\n       \"48      54         West Virginia          23707.0          681.0       203.0   \\n\",\n       \"49      55             Wisconsin          29868.0          813.0       135.0   \\n\",\n       \"50      56               Wyoming          30854.0          828.0       342.0   \\n\",\n       \"51      72           Puerto Rico              NaN          464.0         NaN   \\n\",\n       \"\\n\",\n       \"    rent_moe  \\n\",\n       \"   <float64>  \\n\",\n       \"0        3.0  \\n\",\n       \"1       13.0  \\n\",\n       \"2        4.0  \\n\",\n       \"3        5.0  \\n\",\n       \"4        3.0  \\n\",\n       \"5        5.0  \\n\",\n       \"6        5.0  \\n\",\n       \"7       10.0  \\n\",\n       \"8       17.0  \\n\",\n       \"9        3.0  \\n\",\n       \"10       3.0  \\n\",\n       \"11      18.0  \\n\",\n       \"12       7.0  \\n\",\n       \"13       3.0  \\n\",\n       \"14       3.0  \\n\",\n       \"15       4.0  \\n\",\n       \"16       5.0  \\n\",\n       \"17       4.0  \\n\",\n       \"18       4.0  \\n\",\n       \"19       7.0  \\n\",\n       \"20       5.0  \\n\",\n       \"21       5.0  \\n\",\n       \"22       3.0  \\n\",\n       \"23       4.0  \\n\",\n       \"24       5.0  \\n\",\n       \"25       4.0  \\n\",\n       \"26       9.0  \\n\",\n       \"27       4.0  \\n\",\n       \"28       6.0  \\n\",\n       \"29       9.0  \\n\",\n       \"30       4.0  \\n\",\n       \"31       6.0  \\n\",\n       \"32       3.0  \\n\",\n       \"33       3.0  \\n\",\n       \"34       9.0  \\n\",\n       \"35       2.0  \\n\",\n       \"36       3.0  \\n\",\n       \"37       4.0  \\n\",\n       \"38       3.0  \\n\",\n       \"39       6.0  \\n\",\n       \"40       4.0  \\n\",\n       \"41       7.0  \\n\",\n       \"42       4.0  \\n\",\n       \"43       2.0  \\n\",\n       \"44       6.0  \\n\",\n       \"45      11.0  \\n\",\n       \"46       5.0  \\n\",\n       \"47       4.0  \\n\",\n       \"48       6.0  \\n\",\n       \"49       3.0  \\n\",\n       \"50      11.0  \\n\",\n       \"51       6.0  \"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"us_rent_income >> \\\\\\n\",\n    \"  pivot_wider(\\n\",\n    \"    names_from=f.variable,\\n\",\n    \"    names_glue=\\\"{variable}_{_value}\\\",\\n\",\n    \"    values_from=c(f.estimate, f.moe)\\n\",\n    \"  )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"abstract-gnome\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.137187Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.136396Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.151097Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.151750Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>breaks</th>\\n\",\n       \"      <th>wool</th>\\n\",\n       \"      <th>tension</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>54</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>25</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>70</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>51</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>67</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>12</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>35</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>30</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>36</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>18</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>43</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>A</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>27</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>14</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>31</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>41</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>44</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>L</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>42</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>26</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>19</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>43</th>\\n\",\n       \"      <td>39</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>44</th>\\n\",\n       \"      <td>29</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>M</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>45</th>\\n\",\n       \"      <td>20</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>46</th>\\n\",\n       \"      <td>21</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>47</th>\\n\",\n       \"      <td>24</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>48</th>\\n\",\n       \"      <td>17</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>49</th>\\n\",\n       \"      <td>13</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>50</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>51</th>\\n\",\n       \"      <td>15</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>52</th>\\n\",\n       \"      <td>16</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>53</th>\\n\",\n       \"      <td>28</td>\\n\",\n       \"      <td>B</td>\\n\",\n       \"      <td>H</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    breaks     wool  tension\\n\",\n       \"   <int64> <object> <object>\\n\",\n       \"0       26        A        L\\n\",\n       \"1       30        A        L\\n\",\n       \"2       54        A        L\\n\",\n       \"3       25        A        L\\n\",\n       \"4       70        A        L\\n\",\n       \"5       52        A        L\\n\",\n       \"6       51        A        L\\n\",\n       \"7       26        A        L\\n\",\n       \"8       67        A        L\\n\",\n       \"9       18        A        M\\n\",\n       \"10      21        A        M\\n\",\n       \"11      29        A        M\\n\",\n       \"12      17        A        M\\n\",\n       \"13      12        A        M\\n\",\n       \"14      18        A        M\\n\",\n       \"15      35        A        M\\n\",\n       \"16      30        A        M\\n\",\n       \"17      36        A        M\\n\",\n       \"18      36        A        H\\n\",\n       \"19      21        A        H\\n\",\n       \"20      24        A        H\\n\",\n       \"21      18        A        H\\n\",\n       \"22      10        A        H\\n\",\n       \"23      43        A        H\\n\",\n       \"24      28        A        H\\n\",\n       \"25      15        A        H\\n\",\n       \"26      26        A        H\\n\",\n       \"27      27        B        L\\n\",\n       \"28      14        B        L\\n\",\n       \"29      29        B        L\\n\",\n       \"30      19        B        L\\n\",\n       \"31      29        B        L\\n\",\n       \"32      31        B        L\\n\",\n       \"33      41        B        L\\n\",\n       \"34      20        B        L\\n\",\n       \"35      44        B        L\\n\",\n       \"36      42        B        M\\n\",\n       \"37      26        B        M\\n\",\n       \"38      19        B        M\\n\",\n       \"39      16        B        M\\n\",\n       \"40      39        B        M\\n\",\n       \"41      28        B        M\\n\",\n       \"42      21        B        M\\n\",\n       \"43      39        B        M\\n\",\n       \"44      29        B        M\\n\",\n       \"45      20        B        H\\n\",\n       \"46      21        B        H\\n\",\n       \"47      24        B        H\\n\",\n       \"48      17        B        H\\n\",\n       \"49      13        B        H\\n\",\n       \"50      15        B        H\\n\",\n       \"51      15        B        H\\n\",\n       \"52      16        B        H\\n\",\n       \"53      28        B        H\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"warpbreaks\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"strong-brunswick\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.182339Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.167220Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:51.188224Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:51.188967Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>tension</th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>H</td>\\n\",\n       \"      <td>24.555556</td>\\n\",\n       \"      <td>18.777778</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>L</td>\\n\",\n       \"      <td>44.555556</td>\\n\",\n       \"      <td>28.222222</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>M</td>\\n\",\n       \"      <td>24.000000</td>\\n\",\n       \"      <td>28.777778</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   tension          A          B\\n\",\n       \"  <object>  <float64>  <float64>\\n\",\n       \"0        H  24.555556  18.777778\\n\",\n       \"1        L  44.555556  28.222222\\n\",\n       \"2        M  24.000000  28.777778\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"warpbreaks >> \\\\\\n\",\n    \"  pivot_wider(\\n\",\n    \"    names_from=f.wool,\\n\",\n    \"    values_from=f.breaks,\\n\",\n    \"    values_fn = mean\\n\",\n    \"  )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"96c53ea4\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/pull.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"radio-madonna\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:37.483231Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:37.482643Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.290463Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.290843Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fpull.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ pull</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Pull a series or a dataframe from a dataframe\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`var`: The column to pull, either the name or the index  \\n\",\n       \"&emsp;&emsp;`name`: The name of the pulled value  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- If `to` is frame, or the value pulled is data frame, it will be\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;the column names  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- If `to` is series, it will be the series name. If multiple names\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;are given, only the first name will be used.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- If `to` is series, but value pulled is a data frame, then a\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;dictionary of series with the series names as keys or given `name`  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;as keys.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`to`: Type of data to return.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Only works when pulling `a` for name `a$b`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- series: Return a pandas Series object\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Group information will be lost  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;If pulled value is a dataframe, it will return a dict of series,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;with the series names or the `name` provided.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- array: Return a numpy.ndarray object\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- frame: Return a DataFrame with that column\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- list: Return a python list\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- dict: Return a dict with `name` as keys and pulled value as values\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;Only a single column is allowed to pull  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- If not provided: `series` when pulled data has only one columns.\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;`dict` if `name` provided and has the same length as the pulled  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;single column. Otherwise `frame`.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The data according to `to`  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/pull.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars, mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(pull)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"brilliant-developer\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.298237Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.297348Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.304964Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.303969Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Mazda RX4              4\\n\",\n       \"Mazda RX4 Wag          4\\n\",\n       \"Datsun 710             1\\n\",\n       \"Hornet 4 Drive         1\\n\",\n       \"Hornet Sportabout      2\\n\",\n       \"Valiant                1\\n\",\n       \"Duster 360             4\\n\",\n       \"Merc 240D              2\\n\",\n       \"Merc 230               2\\n\",\n       \"Merc 280               4\\n\",\n       \"Merc 280C              4\\n\",\n       \"Merc 450SE             3\\n\",\n       \"Merc 450SL             3\\n\",\n       \"Merc 450SLC            3\\n\",\n       \"Cadillac Fleetwood     4\\n\",\n       \"Lincoln Continental    4\\n\",\n       \"Chrysler Imperial      4\\n\",\n       \"Fiat 128               1\\n\",\n       \"Honda Civic            2\\n\",\n       \"Toyota Corolla         1\\n\",\n       \"Toyota Corona          1\\n\",\n       \"Dodge Challenger       2\\n\",\n       \"AMC Javelin            2\\n\",\n       \"Camaro Z28             4\\n\",\n       \"Pontiac Firebird       2\\n\",\n       \"Fiat X1-9              1\\n\",\n       \"Porsche 914-2          2\\n\",\n       \"Lotus Europa           2\\n\",\n       \"Ford Pantera L         4\\n\",\n       \"Ferrari Dino           6\\n\",\n       \"Maserati Bora          8\\n\",\n       \"Volvo 142E             2\\n\",\n       \"Name: carb, dtype: int64\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> pull(-1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"national-association\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.311180Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.310492Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.314920Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.315327Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"[4,\\n\",\n       \" 4,\\n\",\n       \" 1,\\n\",\n       \" 1,\\n\",\n       \" 2,\\n\",\n       \" 1,\\n\",\n       \" 4,\\n\",\n       \" 2,\\n\",\n       \" 2,\\n\",\n       \" 4,\\n\",\n       \" 4,\\n\",\n       \" 3,\\n\",\n       \" 3,\\n\",\n       \" 3,\\n\",\n       \" 4,\\n\",\n       \" 4,\\n\",\n       \" 4,\\n\",\n       \" 1,\\n\",\n       \" 2,\\n\",\n       \" 1,\\n\",\n       \" 1,\\n\",\n       \" 2,\\n\",\n       \" 2,\\n\",\n       \" 4,\\n\",\n       \" 2,\\n\",\n       \" 1,\\n\",\n       \" 2,\\n\",\n       \" 2,\\n\",\n       \" 4,\\n\",\n       \" 6,\\n\",\n       \" 8,\\n\",\n       \" 2]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> pull(-1, to='list')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"known-premium\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.323917Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.323107Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.326904Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.327254Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Mazda RX4              6\\n\",\n       \"Mazda RX4 Wag          6\\n\",\n       \"Datsun 710             4\\n\",\n       \"Hornet 4 Drive         6\\n\",\n       \"Hornet Sportabout      8\\n\",\n       \"Valiant                6\\n\",\n       \"Duster 360             8\\n\",\n       \"Merc 240D              4\\n\",\n       \"Merc 230               4\\n\",\n       \"Merc 280               6\\n\",\n       \"Merc 280C              6\\n\",\n       \"Merc 450SE             8\\n\",\n       \"Merc 450SL             8\\n\",\n       \"Merc 450SLC            8\\n\",\n       \"Cadillac Fleetwood     8\\n\",\n       \"Lincoln Continental    8\\n\",\n       \"Chrysler Imperial      8\\n\",\n       \"Fiat 128               4\\n\",\n       \"Honda Civic            4\\n\",\n       \"Toyota Corolla         4\\n\",\n       \"Toyota Corona          4\\n\",\n       \"Dodge Challenger       8\\n\",\n       \"AMC Javelin            8\\n\",\n       \"Camaro Z28             8\\n\",\n       \"Pontiac Firebird       8\\n\",\n       \"Fiat X1-9              4\\n\",\n       \"Porsche 914-2          4\\n\",\n       \"Lotus Europa           4\\n\",\n       \"Ford Pantera L         8\\n\",\n       \"Ferrari Dino           6\\n\",\n       \"Maserati Bora          8\\n\",\n       \"Volvo 142E             4\\n\",\n       \"Name: cyl, dtype: int64\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> pull(1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"suspended-cooler\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.347039Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.345756Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.358557Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.357248Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"Mazda RX4              6\\n\",\n       \"Mazda RX4 Wag          6\\n\",\n       \"Datsun 710             4\\n\",\n       \"Hornet 4 Drive         6\\n\",\n       \"Hornet Sportabout      8\\n\",\n       \"Valiant                6\\n\",\n       \"Duster 360             8\\n\",\n       \"Merc 240D              4\\n\",\n       \"Merc 230               4\\n\",\n       \"Merc 280               6\\n\",\n       \"Merc 280C              6\\n\",\n       \"Merc 450SE             8\\n\",\n       \"Merc 450SL             8\\n\",\n       \"Merc 450SLC            8\\n\",\n       \"Cadillac Fleetwood     8\\n\",\n       \"Lincoln Continental    8\\n\",\n       \"Chrysler Imperial      8\\n\",\n       \"Fiat 128               4\\n\",\n       \"Honda Civic            4\\n\",\n       \"Toyota Corolla         4\\n\",\n       \"Toyota Corona          4\\n\",\n       \"Dodge Challenger       8\\n\",\n       \"AMC Javelin            8\\n\",\n       \"Camaro Z28             8\\n\",\n       \"Pontiac Firebird       8\\n\",\n       \"Fiat X1-9              4\\n\",\n       \"Porsche 914-2          4\\n\",\n       \"Lotus Europa           4\\n\",\n       \"Ford Pantera L         8\\n\",\n       \"Ferrari Dino           6\\n\",\n       \"Maserati Bora          8\\n\",\n       \"Volvo 142E             4\\n\",\n       \"Name: cyl, dtype: int64\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> pull(f.cyl)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"iraqi-shaft\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.372685Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.371837Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.546249Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.545748Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    10\\n\",\n       \"1    18\\n\",\n       \"2    24\\n\",\n       \"3    28\\n\",\n       \"4    30\\n\",\n       \"5    30\\n\",\n       \"6    28\\n\",\n       \"7    24\\n\",\n       \"8    18\\n\",\n       \"9    10\\n\",\n       \"Name: z, dtype: int64\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=range(1, 11), y=range(10, 0, -1))\\n\",\n    \"df >> mutate(z=f.x*f.y) >> pull()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"danish-assignment\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.556438Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.555726Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.559884Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.559114Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'Luke Skywalker': 172.0,\\n\",\n       \" 'C-3PO': 167.0,\\n\",\n       \" 'R2-D2': 96.0,\\n\",\n       \" 'Darth Vader': 202.0,\\n\",\n       \" 'Leia Organa': 150.0,\\n\",\n       \" 'Owen Lars': 178.0,\\n\",\n       \" 'Beru Whitesun lars': 165.0,\\n\",\n       \" 'R5-D4': 97.0,\\n\",\n       \" 'Biggs Darklighter': 183.0,\\n\",\n       \" 'Obi-Wan Kenobi': 182.0,\\n\",\n       \" 'Anakin Skywalker': 188.0,\\n\",\n       \" 'Wilhuff Tarkin': 180.0,\\n\",\n       \" 'Chewbacca': 228.0,\\n\",\n       \" 'Han Solo': 180.0,\\n\",\n       \" 'Greedo': 173.0,\\n\",\n       \" 'Jabba Desilijic Tiure': 175.0,\\n\",\n       \" 'Wedge Antilles': 170.0,\\n\",\n       \" 'Jek Tono Porkins': 180.0,\\n\",\n       \" 'Yoda': 66.0,\\n\",\n       \" 'Palpatine': 170.0,\\n\",\n       \" 'Boba Fett': 183.0,\\n\",\n       \" 'IG-88': 200.0,\\n\",\n       \" 'Bossk': 190.0,\\n\",\n       \" 'Lando Calrissian': 177.0,\\n\",\n       \" 'Lobot': 175.0,\\n\",\n       \" 'Ackbar': 180.0,\\n\",\n       \" 'Mon Mothma': 150.0,\\n\",\n       \" 'Arvel Crynyd': nan,\\n\",\n       \" 'Wicket Systri Warrick': 88.0,\\n\",\n       \" 'Nien Nunb': 160.0,\\n\",\n       \" 'Qui-Gon Jinn': 193.0,\\n\",\n       \" 'Nute Gunray': 191.0,\\n\",\n       \" 'Finis Valorum': 170.0,\\n\",\n       \" 'Jar Jar Binks': 196.0,\\n\",\n       \" 'Roos Tarpals': 224.0,\\n\",\n       \" 'Rugor Nass': 206.0,\\n\",\n       \" 'Ric Olié': 183.0,\\n\",\n       \" 'Watto': 137.0,\\n\",\n       \" 'Sebulba': 112.0,\\n\",\n       \" 'Quarsh Panaka': 183.0,\\n\",\n       \" 'Shmi Skywalker': 163.0,\\n\",\n       \" 'Darth Maul': 175.0,\\n\",\n       \" 'Bib Fortuna': 180.0,\\n\",\n       \" 'Ayla Secura': 178.0,\\n\",\n       \" 'Dud Bolt': 94.0,\\n\",\n       \" 'Gasgano': 122.0,\\n\",\n       \" 'Ben Quadinaros': 163.0,\\n\",\n       \" 'Mace Windu': 188.0,\\n\",\n       \" 'Ki-Adi-Mundi': 198.0,\\n\",\n       \" 'Kit Fisto': 196.0,\\n\",\n       \" 'Eeth Koth': 171.0,\\n\",\n       \" 'Adi Gallia': 184.0,\\n\",\n       \" 'Saesee Tiin': 188.0,\\n\",\n       \" 'Yarael Poof': 264.0,\\n\",\n       \" 'Plo Koon': 188.0,\\n\",\n       \" 'Mas Amedda': 196.0,\\n\",\n       \" 'Gregar Typho': 185.0,\\n\",\n       \" 'Cordé': 157.0,\\n\",\n       \" 'Cliegg Lars': 183.0,\\n\",\n       \" 'Poggle the Lesser': 183.0,\\n\",\n       \" 'Luminara Unduli': 170.0,\\n\",\n       \" 'Barriss Offee': 166.0,\\n\",\n       \" 'Dormé': 165.0,\\n\",\n       \" 'Dooku': 193.0,\\n\",\n       \" 'Bail Prestor Organa': 191.0,\\n\",\n       \" 'Jango Fett': 183.0,\\n\",\n       \" 'Zam Wesell': 168.0,\\n\",\n       \" 'Dexter Jettster': 198.0,\\n\",\n       \" 'Lama Su': 229.0,\\n\",\n       \" 'Taun We': 213.0,\\n\",\n       \" 'Jocasta Nu': 167.0,\\n\",\n       \" 'Ratts Tyerell': 79.0,\\n\",\n       \" 'R4-P17': 96.0,\\n\",\n       \" 'Wat Tambor': 193.0,\\n\",\n       \" 'San Hill': 191.0,\\n\",\n       \" 'Shaak Ti': 178.0,\\n\",\n       \" 'Grievous': 216.0,\\n\",\n       \" 'Tarfful': 234.0,\\n\",\n       \" 'Raymus Antilles': 188.0,\\n\",\n       \" 'Sly Moore': 178.0,\\n\",\n       \" 'Tion Medon': 206.0,\\n\",\n       \" 'Finn': nan,\\n\",\n       \" 'Rey': nan,\\n\",\n       \" 'Poe Dameron': nan,\\n\",\n       \" 'BB8': nan,\\n\",\n       \" 'Captain Phasma': nan,\\n\",\n       \" 'Padmé Amidala': 165.0}\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> pull(f.height, name=f.name)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/ranking.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"interstate-header\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:54.309088Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:54.308312Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:56.595695Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:56.595020Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frow_number.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ row_number</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the row number of x\\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get row number  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `row_number()`  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ min_rank</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the min rank of x\\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get row number  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `min_rank()`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_last`: How NA values are ranked  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"keep\\\": NA values are ranked at the end\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"top\\\": NA values are ranked at the top\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"bottom\\\": NA values are ranked at the bottom\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ dense_rank</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the dense rank of x\\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get row number  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `dense_rank()`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_last`: How NA values are ranked  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"keep\\\": NA values are ranked at the end\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"top\\\": NA values are ranked at the top\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"bottom\\\": NA values are ranked at the bottom\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ percent_rank</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the percent rank of x\\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get row number  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `percent_rank()`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_last`: How NA values are ranked  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"keep\\\": NA values are ranked at the end\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"top\\\": NA values are ranked at the top\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"bottom\\\": NA values are ranked at the bottom\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ cume_dist</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the cume_dist of x\\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get row number  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `cume_dist()`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`na_last`: How NA values are ranked  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"keep\\\": NA values are ranked at the end\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"top\\\": NA values are ranked at the top\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"bottom\\\": NA values are ranked at the bottom\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ ntile</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### a rough rank, which breaks the input vector into n buckets.\\n\",\n       \"The size of the buckets may differ by up to one, larger buckets  \\n\",\n       \"have lower rank.  \\n\",\n       \"\\n\",\n       \"Note that this function doesn't support piping.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: The data to get  rownumber  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Defaults to `Symbolic()` so the whole data is used by default  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;when called `ntile(n=...)`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`n`: The number of groups to divide the data into  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The row number  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/ranking.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"import numpy\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(row_number, min_rank, dense_rank, percent_rank, cume_dist, ntile)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"prompt-outline\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:56.613630Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:56.612780Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:56.767009Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:56.767675Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>row_number</th>\\n\",\n       \"      <th>min_rank</th>\\n\",\n       \"      <th>dense_rank</th>\\n\",\n       \"      <th>percent_rank</th>\\n\",\n       \"      <th>cume_dist</th>\\n\",\n       \"      <th>ntile</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>1.00</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>0.00</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"      <td>0.8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>4.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"      <td>0.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"      <td>0.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>6.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x  row_number  min_rank  dense_rank  percent_rank  cume_dist  \\\\\\n\",\n       \"  <float64>   <float64> <float64>   <float64>     <float64>  <float64>   \\n\",\n       \"0       5.0         1.0       5.0         4.0          1.00        1.0   \\n\",\n       \"1       1.0         2.0       1.0         1.0          0.00        0.2   \\n\",\n       \"2       3.0         3.0       4.0         3.0          0.75        0.8   \\n\",\n       \"3       2.0         4.0       2.0         2.0          0.25        0.6   \\n\",\n       \"4       2.0         5.0       2.0         2.0          0.25        0.6   \\n\",\n       \"5       NaN         6.0       NaN         NaN           NaN        NaN   \\n\",\n       \"\\n\",\n       \"       ntile  \\n\",\n       \"  <category>  \\n\",\n       \"0          2  \\n\",\n       \"1          1  \\n\",\n       \"2          1  \\n\",\n       \"3          1  \\n\",\n       \"4          1  \\n\",\n       \"5        NaN  \"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(5, 1, 3, 2, 2, numpy.nan))\\n\",\n    \"df >> mutate(\\n\",\n    \"    row_number=row_number(),\\n\",\n    \"    min_rank=min_rank(f.x), \\n\",\n    \"    dense_rank=dense_rank(f.x),\\n\",\n    \"    percent_rank=percent_rank(f.x),\\n\",\n    \"    cume_dist=cume_dist(f.x),\\n\",\n    \"    ntile=ntile(f.x, n=2)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"composed-macro\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:56.808996Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:56.808312Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:56.821087Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:56.821500Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>ntile</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;category&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x      ntile\\n\",\n       \"  <int64> <category>\\n\",\n       \"0       0          1\\n\",\n       \"1       1          1\\n\",\n       \"2       2          1\\n\",\n       \"3       3          2\\n\",\n       \"4       4          2\\n\",\n       \"5       5          3\\n\",\n       \"6       6          3\\n\",\n       \"7       7          3\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x=range(8)) >> mutate(ntile=ntile(f.x, n=3))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"distinct-means\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:56.870357Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:56.869814Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:56.878646Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:56.877742Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;bool&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>False</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Mazda RX4                21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag            21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Datsun 710               22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Hornet 4 Drive           21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb      n  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64> <bool>  \\n\",\n       \"Mazda RX4               16.46       0       1       4       4  False  \\n\",\n       \"Mazda RX4 Wag           17.02       0       1       4       4  False  \\n\",\n       \"Datsun 710              18.61       1       1       4       1  False  \\n\",\n       \"Hornet 4 Drive          19.44       1       0       3       1  False  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  False  \\n\",\n       \"Valiant                 20.22       1       0       3       1  False  \\n\",\n       \"Duster 360              15.84       0       0       3       4  False  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  False  \\n\",\n       \"Merc 230                22.90       1       0       4       2  False  \\n\",\n       \"Merc 280                18.30       1       0       4       4  False  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  False  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  False  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  False  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  False  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  False  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  False  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  False  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  False  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  False  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  False  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  False  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  False  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  False  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  False  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  False  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  False  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  False  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  False  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  False  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  False  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  False  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  False  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> mutate(n=row_number() == 0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"cardiac-handy\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:56.904797Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:56.904123Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:56.918970Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:56.919564Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                  <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Mazda RX4              21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag          21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Datsun 710             22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Hornet 4 Drive         21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Hornet Sportabout      18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360             14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D              24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230               22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"\\n\",\n       \"                       qsec      vs      am    gear    carb  \\n\",\n       \"                  <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4             16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag         17.02       0       1       4       4  \\n\",\n       \"Datsun 710            18.61       1       1       4       1  \\n\",\n       \"Hornet 4 Drive        19.44       1       0       3       1  \\n\",\n       \"Hornet Sportabout     17.02       0       0       3       2  \\n\",\n       \"Valiant               20.22       1       0       3       1  \\n\",\n       \"Duster 360            15.84       0       0       3       4  \\n\",\n       \"Merc 240D             20.00       1       0       4       2  \\n\",\n       \"Merc 230              22.90       1       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> filter(0 <= row_number() < 10)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/readme.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"0bf6a031\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:14.064442Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:14.063864Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:15.041239Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:15.040490Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:18:09][datar][WARNING] Builtin name \\\"filter\\\" has been masked by datar.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from datar import f\\n\",\n    \"from datar.dplyr import mutate, filter, if_else\\n\",\n    \"from datar.tibble import tibble\\n\",\n    \"# or\\n\",\n    \"# from datar.all import f, mutate, filter, if_else, tibble\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"58de6152\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.051111Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.050493Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:15.206338Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:15.206852Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"        x        y       z\\n\",\n      \"  <int64> <object> <int64>\\n\",\n      \"0       0     zero       0\\n\",\n      \"1       1      one       1\\n\",\n      \"2       2      two       2\\n\",\n      \"3       3    three       3\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"    x=range(4),\\n\",\n    \"    y=['zero', 'one', 'two', 'three']\\n\",\n    \")\\n\",\n    \"print(df >> mutate(z=f.x))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"14e1e1e7\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.216846Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.216313Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:15.233753Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:15.231626Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"        x        y         z\\n\",\n      \"  <int64> <object> <float64>\\n\",\n      \"0       0     zero       0.0\\n\",\n      \"1       1      one       0.0\\n\",\n      \"2       2      two       1.0\\n\",\n      \"3       3    three       1.0\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(df >> mutate(z=if_else(f.x>1, 1, 0)))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"eeedac45\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.242660Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.242045Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:15.247915Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:15.247328Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"        x        y\\n\",\n      \"  <int64> <object>\\n\",\n      \"2       2      two\\n\",\n      \"3       3    three\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(df >> filter(f.x>1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"4dbd113a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.267746Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.258642Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:15.270724Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:15.271081Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"        x        y         z\\n\",\n      \"  <int64> <object> <float64>\\n\",\n      \"2       2      two       1.0\\n\",\n      \"3       3    three       1.0\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(df >> mutate(z=if_else(f.x>1, 1, 0)) >> filter(f.z==1))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"f0577dbd\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:15.277204Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:15.276249Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:20.025132Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:20.025675Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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5l13jeqCe4B2S05U79RkixMBkeWE1GSdFPy+aDRNraisPswzAKDtbdiwQWPGjFFOTo5SU1PVq1cv/eUvf5F04OUK7777rs4++2wlJyfrjDPO0NKlS3XWWWdpxowZocd8+7wVK1bo7LPPVlpams455xytXr26I/9oMYPlChHENE0tLt93wdmobBfbhgEHMCrHqS/rPZKk18urNDrHJRvfKwA60Pjx45Wfn69//etfcjqd+vrrr7Vz584DPra4uFijRo1Snz599Pzzz6uqqko//elPVVVVpbPOOqvFY/fs2aMbbrhBv/71r+V0OnXbbbdp0qRJ2rx5sxISWL54NCi5EeSzugbtDF5Ik2G36XxXusWJgMh0Tma6shxlqvT5VdLk09qaevXNTLM6FoA4UVZWpi1btujhhx/W+PHjJUlDhgw56OMffPBBORwOvfbaa8rIaN4S9LjjjtMFF1yw32MrKir01ltv6dRTT5UkpaWlaciQIfrggw90/vnnt8OfJnaxXCGChM/iDs1yKpFtw4ADchhGi11HFrOdGIAOlJOTo+7du+u2227T008/fdAZ3G999NFHGjJkSKjgStL555+v7Ozs/R7buXPnUMGVpFNOOUWSDvs5sD9aVITY623SmprmKzFtkoZnZ1obCIhwF2U7lRBcorC+rkE7PWwnBqBjGIahJUuWqHfv3rr++utVVFSkfv366e233z7g44uLi5WXt/9OMJ06ddrvPpfL1WKcmJgoSfJ4PMcePM5QciPEkvJ924adk5muXLYNAw4p02HXAOe+JT3hx2ADQHs76aST9MILL6iyslIrVqxQUlKSxo8fr9ra2v0eW1hYqNLS0v3uLykp6YiocYuSGwE8/oCWV4ZvG8bhD8CRCP9eeaeyRrVsJwaggyUkJGjQoEH69a9/rerqau3evXu/x/Tv31/Lli1TTU1N6L533nlHFRUVHRk17lByI8Db7hrVB7cN65GcpF5sGwYckeNSkkPfL2wnBqCjfPrppxo+fLieeOIJLV++XK+88oruvvtu9ejRQyeccMJ+j7/55pvl9/s1duxYLViwQLNmzdJVV12l3Nxc2bj+pt3wlbVYwDRbvM06OsfJtmHAUQifzX29vEoB0zzEowHg2BUUFKigoED33XefRo8erWuvvVZFRUVasmSJ7Hb7fo8vLCzUokWLVFNToylTpui+++7T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WbNa/H5hYaEGDRqk5557LnTfc889p0GDBqmwsFDr1q3T5ZdfroceekgVFRX6wx/+oIsvvjiUwWoOqwMAgNWcw0ap6s0lkqSaD99XzmVXyOHKsjgVEB28e4pVv25t88Bul3PocGsDdYCpn7XPOz7PnXbiAe//n//5Hx1//PGSpHvuuUfnnHOOTjzxRI0cOVJjx46VJF155ZV67LHHNG/ePP3oRz9SYmKivv76a5WVlSk3N1fnnntuqzJNmzZNf//733XTTTdJkmbPnq0bbrhBkjRz5kxdc801Ov/85gM/xo0bp7POOksLFy7UlVde2arP15aYyQUQ9xILOyv19DObB36/qpZH/1XFQEf59gdESUrvd64cWdkWpolN3bp1C93u3r27vF6viouL1aNHjxaP69Gjh3bt2iVJevnll7V+/Xr17NlT/fv316uvvtqqz/39739fn3/+ub788ktt2rRJGzdu1Pe//31JzUsf/v73v8vlcoV+rVq1Srt3727dH7SNMZMLAJKcw0epfv06SVL18jeUPe5iGQkJFqcCIlugoV7V76wIjZ1h2/Kh7Wzfvr3F7YSEBBUWFmrt2rUtHrd161YNH948k96nTx+99NJL8vv9mjt3rqZMmaLy8vL9PvbhLhBMT0/XxIkT9eyzz8o0TU2cOFHp6emSmsv3r371K915553H+CdsH5RcAJCUetqZSsgvUNPePfJXV6n2o1XKGHDB4Z8IxLHqd9+W6WmQJCUdd7yST+hpcaKOcbBlBe3lscce07hx45Sbm6vf/e53uuyyyzR16lT96U9/0qJFizR8+HA999xz+uKLLzRx4kR5vV7NnTtX48aNU1ZWllwulwzDkN1u3+9j5+fna/PmzYf8/NOmTdPPf/5zSdLf//730P0/+clPNG7cOA0bNkwDBgxQY2OjVq1apZ49e6pr165t+0VoBZYrAICC24mFHfXrXrpIZvDkJgD7MwMBVb0Rvm3YaLYNaydXXnmlJkyYoK5du8put+vhhx/WSSedpOeff1633nqrcnJy9PDDD+u1115Tbm7zKXNz5szRCSecoIyMDN166616/vnnlZycvN/HvvHGGzV//nxlZWXphz/84QE//4gRI1RbW6va2lqNGLHvqOY+ffro6aef1i233KKcnBx1795dDzzwgAKBQPt8IY6SYfKveMiaNWvUt29frV69Wn36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\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<ggplot: (8749008935172)>\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# works with plotnine\\n\",\n    \"import numpy\\n\",\n    \"from datar.base import sin, pi\\n\",\n    \"from datar.tibble import tibble\\n\",\n    \"from datar.dplyr import mutate, if_else\\n\",\n    \"from plotnine import ggplot, aes, geom_line, theme_classic\\n\",\n    \"\\n\",\n    \"df = tibble(x=numpy.linspace(0, 2 * pi, 500))\\n\",\n    \"(\\n\",\n    \"    df\\n\",\n    \"    >> mutate(y=sin(f.x), sign=if_else(f.y >= 0, \\\"positive\\\", \\\"negative\\\"))\\n\",\n    \"    >> ggplot(aes(x=\\\"x\\\", y=\\\"y\\\"))\\n\",\n    \"    + theme_classic()\\n\",\n    \"    + geom_line(aes(color=\\\"sign\\\"), size=1.2)\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"c30cc8e9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:20.047812Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:20.047169Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:20.809510Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:20.810013Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"<AxesSubplot:xlabel='Sepal_Length', ylabel='Density'>\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\",\n      \"text/plain\": [\n       \"<Figure size 900x180 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {\n      \"needs_background\": \"light\"\n     },\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# very easy to integrate with other libraries\\n\",\n    \"# for example: klib\\n\",\n    \"import klib\\n\",\n    \"from pipda import register_verb\\n\",\n    \"from datar import f\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.dplyr import pull\\n\",\n    \"\\n\",\n    \"dist_plot = register_verb(func=klib.dist_plot)\\n\",\n    \"iris >> pull(f.Sepal_Length) >> dist_plot()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"0beb04c3\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/recode.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"material-amount\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:29.632035Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:29.631390Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.537989Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.538579Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frecode.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ recode</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Recode a vector, replacing elements in it\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A vector to modify  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: replacements  \\n\",\n       \"&emsp;&emsp;`_default`: If supplied, all values not otherwise matched will be  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;given this value. If not supplied and if the replacements are  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;the same type as the original values in series, unmatched values  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;are not changed. If not supplied and if the replacements are  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;not compatible, unmatched values are replaced with np.nan.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_missing`: If supplied, any missing values in .x will be replaced  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by this value.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The vector with values replaced  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/recode.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(recode)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"cordless-istanbul\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.549605Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.548937Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.552617Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.553026Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    Apple\\n\",\n       \"1        c\\n\",\n       \"2        c\\n\",\n       \"3    Apple\\n\",\n       \"4        b\\n\",\n       \"5    Apple\\n\",\n       \"6        b\\n\",\n       \"7        b\\n\",\n       \"8        b\\n\",\n       \"9        c\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"char_vec = sample(c(\\\"a\\\", \\\"b\\\", \\\"c\\\"), 10, replace=True)\\n\",\n    \"recode(char_vec, a=\\\"Apple\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"talented-insert\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.560559Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.559899Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.563572Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.564016Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     Apple\\n\",\n       \"1         c\\n\",\n       \"2         c\\n\",\n       \"3     Apple\\n\",\n       \"4    Banana\\n\",\n       \"5     Apple\\n\",\n       \"6    Banana\\n\",\n       \"7    Banana\\n\",\n       \"8    Banana\\n\",\n       \"9         c\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(char_vec, a=\\\"Apple\\\", b=\\\"Banana\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"piano-jordan\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.570326Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.569697Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.575258Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.574225Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     Apple\\n\",\n       \"1       NaN\\n\",\n       \"2       NaN\\n\",\n       \"3     Apple\\n\",\n       \"4    Banana\\n\",\n       \"5     Apple\\n\",\n       \"6    Banana\\n\",\n       \"7    Banana\\n\",\n       \"8    Banana\\n\",\n       \"9       NaN\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(char_vec, a=\\\"Apple\\\", b=\\\"Banana\\\", _default = NA)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"civilian-aberdeen\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.582836Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.581981Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.586613Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.587100Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     apple\\n\",\n       \"1    carrot\\n\",\n       \"2    carrot\\n\",\n       \"3     apple\\n\",\n       \"4    banana\\n\",\n       \"5     apple\\n\",\n       \"6    banana\\n\",\n       \"7    banana\\n\",\n       \"8    banana\\n\",\n       \"9    carrot\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"level_key = dict(a=\\\"apple\\\", b=\\\"banana\\\", c=\\\"carrot\\\")\\n\",\n    \"recode(char_vec, **level_key)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"perceived-underground\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.595687Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.594899Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.600811Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.601267Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:19:25][datar][WARNING] Unreplaced values treated as NA as `_x` is not compatible. Please specify replacements exhaustively or supply `_default`\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    NaN\\n\",\n       \"1     20\\n\",\n       \"2    NaN\\n\",\n       \"3     40\\n\",\n       \"4    NaN\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"num_vec = c(range(4), NA)\\n\",\n    \"recode(num_vec, {1: 20, 3: 40})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"paperback-threshold\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.608649Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.606230Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.613872Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.612973Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0      a\\n\",\n       \"1      b\\n\",\n       \"2      c\\n\",\n       \"3      d\\n\",\n       \"4    NaN\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(num_vec, \\\"a\\\", \\\"b\\\", \\\"c\\\", \\\"d\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"quick-nicaragua\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.621513Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.620815Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.627088Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.627476Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0          a\\n\",\n       \"1    nothing\\n\",\n       \"2          c\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(c(0,4,2), \\\"a\\\", \\\"b\\\", \\\"c\\\", \\\"d\\\", _default=\\\"nothing\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"sealed-description\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.633870Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.632901Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.638719Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.638086Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:19:31][datar][WARNING] Unreplaced values treated as NA as `_x` is not compatible. Please specify replacements exhaustively or supply `_default`\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    NaN\\n\",\n       \"1      b\\n\",\n       \"2    NaN\\n\",\n       \"3      d\\n\",\n       \"4    NaN\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(num_vec, {1: \\\"b\\\", 3: \\\"d\\\"})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"adjacent-harrison\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.646297Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.645533Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.648897Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.649332Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0        a\\n\",\n       \"1        b\\n\",\n       \"2        c\\n\",\n       \"3    other\\n\",\n       \"4      NaN\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(num_vec, \\\"a\\\", \\\"b\\\", \\\"c\\\", _default=\\\"other\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"requested-presentation\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.655731Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.655058Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.660919Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.661302Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0          a\\n\",\n       \"1          b\\n\",\n       \"2          c\\n\",\n       \"3      other\\n\",\n       \"4    missing\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode(num_vec, \\\"a\\\", \\\"b\\\", \\\"c\\\", _default=\\\"other\\\", _missing=\\\"missing\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"manufactured-tract\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.669879Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.669272Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.672942Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.673970Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['a', 'b', 'c']\\n\",\n       \"Categories (3, object): ['a', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"factor_vec = factor(c(\\\"a\\\", \\\"b\\\", \\\"c\\\"))\\n\",\n    \"factor_vec\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"chubby-treasurer\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.684207Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.683379Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.687502Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.687885Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    Apple\\n\",\n       \"1        b\\n\",\n       \"2        c\\n\",\n       \"dtype: category\\n\",\n       \"Categories (3, object): ['Apple', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# categories lost\\n\",\n    \"recode(factor_vec, a=\\\"Apple\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"molecular-silly\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.770892Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.767304Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.784841Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.784148Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    Apple\\n\",\n       \"1        b\\n\",\n       \"2        c\\n\",\n       \"dtype: category\\n\",\n       \"Categories (3, object): ['Apple', 'b', 'c']\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode_factor(factor_vec, a=\\\"Apple\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"english-currency\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.795152Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.794527Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.811477Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.811930Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:19:42][datar][WARNING] Unreplaced values treated as NA as `_x` is not compatible. Please specify replacements exhaustively or supply `_default`\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0      z\\n\",\n       \"1      y\\n\",\n       \"2      x\\n\",\n       \"3    NaN\\n\",\n       \"4    NaN\\n\",\n       \"dtype: category\\n\",\n       \"Categories (3, object): ['z', 'y', 'x']\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode_factor(num_vec, {0: \\\"z\\\", 1: \\\"y\\\", 2: \\\"x\\\"})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"guilty-locator\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.821569Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.820837Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.829888Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.828676Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0      z\\n\",\n       \"1      y\\n\",\n       \"2      x\\n\",\n       \"3      D\\n\",\n       \"4    NaN\\n\",\n       \"dtype: category\\n\",\n       \"Categories (4, object): ['z', 'y', 'x', 'D']\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode_factor(num_vec, {0: \\\"z\\\", 1: \\\"y\\\", 2: \\\"x\\\"}, _default=\\\"D\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"id\": \"opponent-nevada\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.838860Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.838050Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.844064Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.843291Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    z\\n\",\n       \"1    y\\n\",\n       \"2    x\\n\",\n       \"3    D\\n\",\n       \"4    M\\n\",\n       \"dtype: category\\n\",\n       \"Categories (5, object): ['z', 'y', 'x', 'D', 'M']\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode_factor(num_vec, {0: \\\"z\\\", 1: \\\"y\\\", 2: \\\"x\\\"}, _default=\\\"D\\\", _missing=\\\"M\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"id\": \"horizontal-shade\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.852634Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.851853Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.855901Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.856297Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    a\\n\",\n       \"1    z\\n\",\n       \"2    y\\n\",\n       \"dtype: category\\n\",\n       \"Categories (3, object): ['z', 'y', 'a']\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"recode_factor(list(letters[:3]), b=\\\"z\\\", c=\\\"y\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"id\": \"accredited-consortium\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:30.865663Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:30.864990Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:30.868476Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:30.868859Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0     apple\\n\",\n       \"1    carrot\\n\",\n       \"2    carrot\\n\",\n       \"3     apple\\n\",\n       \"4    banana\\n\",\n       \"5     apple\\n\",\n       \"6    banana\\n\",\n       \"7    banana\\n\",\n       \"8    banana\\n\",\n       \"9    carrot\\n\",\n       \"dtype: category\\n\",\n       \"Categories (3, object): ['apple', 'banana', 'carrot']\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"level_key = dict(a=\\\"apple\\\", b=\\\"banana\\\", c=\\\"carrot\\\")\\n\",\n    \"recode_factor(char_vec, **level_key)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/reframe.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"4ba9dd17\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:30.653194Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:30.652556Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.410785Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.411264Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Freframe.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ reframe</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Reframe a data frame.\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/reframe.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs, where value is the reframed  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;data for each group  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the reframed columns  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/summarise.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(reframe)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"193d02c5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.468439Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.465218Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.487717Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.490086Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>f</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x\\n\",\n       \"  <object>\\n\",\n       \"0        a\\n\",\n       \"1        b\\n\",\n       \"2        f\\n\",\n       \"3        d\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"table = c(\\\"a\\\", \\\"b\\\", \\\"d\\\", \\\"f\\\")\\n\",\n    \"\\n\",\n    \"df = tibble(\\n\",\n    \"  g = c(1, 1, 1, 2, 2, 2, 2),\\n\",\n    \"  x = c(\\\"e\\\", \\\"a\\\", \\\"b\\\", \\\"c\\\", \\\"f\\\", \\\"d\\\", \\\"a\\\")\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"# `reframe()` allows you to apply functions that return\\n\",\n    \"# an arbitrary number of rows\\n\",\n    \"df >> reframe(x = intersect(f.x, table))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"847cd875\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>e</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>c</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=2)\"\n      ],\n      \"text/plain\": [\n       \"        g        x\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       1        e\\n\",\n       \"1       1        a\\n\",\n       \"2       1        b\\n\",\n       \"3       2        c\\n\",\n       \"4       2        f\\n\",\n       \"5       2        d\\n\",\n       \"6       2        a\\n\",\n       \"[TibbleGrouped: g (n=2)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> group_by(f.g)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"0f48dddc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.498734Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.497950Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.637631Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.638084Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;string&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        g        x\\n\",\n       \"  <Int64> <string>\\n\",\n       \"0       1        a\\n\",\n       \"1       1        b\\n\",\n       \"2       2        f\\n\",\n       \"3       2        d\\n\",\n       \"4       2        a\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# The output is always ungrouped, even when using `group_by()`\\n\",\n    \"(\\n\",\n    \"  df\\n\",\n    \"    >> group_by(f.g)\\n\",\n    \"    >> reframe(x = intersect(f.x, table))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"ccd6b9ad\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>val</th>\\n\",\n       \"      <th>quant</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>11.50</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>13.50</td>\\n\",\n       \"      <td>0.50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>15.75</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        val     quant\\n\",\n       \"  <float64> <float64>\\n\",\n       \"0     11.50      0.25\\n\",\n       \"1     13.50      0.50\\n\",\n       \"2     15.75      0.75\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from pandas.core.groupby import SeriesGroupBy\\n\",\n    \"from pipda import register_func\\n\",\n    \"\\n\",\n    \"@register_func\\n\",\n    \"def quantile_df(x, probs=[0.25, 0.5, 0.75]):\\n\",\n    \"    return tibble(\\n\",\n    \"        val = quantile(x, probs, na_rm=True),\\n\",\n    \"        quant = [probs] if isinstance(x, SeriesGroupBy) else probs\\n\",\n    \"    )\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"x = [10, 15, 18, 12]\\n\",\n    \"quantile_df(x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"73a64ee0\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>val</th>\\n\",\n       \"      <th>quant</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>180.0</td>\\n\",\n       \"      <td>0.50</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>191.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        val     quant\\n\",\n       \"  <float64> <float64>\\n\",\n       \"0     167.0      0.25\\n\",\n       \"1     180.0      0.50\\n\",\n       \"2     191.0      0.75\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> reframe(quantile_df(f.height))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"a630dcd5\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>val</th>\\n\",\n       \"      <th>quant</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;string&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>165.5</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>142</th>\\n\",\n       \"      <td>Umbara</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>143</th>\\n\",\n       \"      <td>Umbara</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>144</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>147 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    homeworld       val     quant\\n\",\n       \"     <string> <Float64> <Float64>\\n\",\n       \"0    Tatooine     165.5      0.25\\n\",\n       \"1    Tatooine     175.0       0.5\\n\",\n       \"2    Tatooine     183.0      0.75\\n\",\n       \"3       Naboo     165.0      0.25\\n\",\n       \"..        ...       ...       ...\\n\",\n       \"4       Naboo     183.0       0.5\\n\",\n       \"142    Umbara     178.0       0.5\\n\",\n       \"143    Umbara     178.0      0.75\\n\",\n       \"144    Utapau     206.0      0.25\\n\",\n       \"145    Utapau     206.0       0.5\\n\",\n       \"146    Utapau     206.0      0.75\\n\",\n       \"\\n\",\n       \"[147 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"(\\n\",\n    \"    starwars\\n\",\n    \"    >> group_by(f.homeworld)\\n\",\n    \"    >> reframe(quantile_df(f.height))\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"99fe1739\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/home/pwwang/.cache/pypoetry/virtualenvs/datar-TA_GutPO-py3.12/lib/python3.12/site-packages/numpy/lib/_nanfunctions_impl.py:1598: RuntimeWarning: All-NaN slice encountered\\n\",\n      \"  return _nanquantile_unchecked(\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>height$val</th>\\n\",\n       \"      <th>height$quant</th>\\n\",\n       \"      <th>mass$val</th>\\n\",\n       \"      <th>mass$quant</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;string&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;Float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>165.5</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>175.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"      <td>80.5</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"      <td>93.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"      <td>50.25</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>183.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"      <td>70.5</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>142</th>\\n\",\n       \"      <td>Umbara</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>143</th>\\n\",\n       \"      <td>Umbara</td>\\n\",\n       \"      <td>178.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"      <td>48.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>144</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>Utapau</td>\\n\",\n       \"      <td>206.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"      <td>80.0</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>147 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    homeworld  height$val  height$quant  mass$val  mass$quant\\n\",\n       \"     <string>   <Float64>     <Float64> <Float64>   <Float64>\\n\",\n       \"0    Tatooine       165.5          0.25      75.0        0.25\\n\",\n       \"1    Tatooine       175.0           0.5      80.5         0.5\\n\",\n       \"2    Tatooine       183.0          0.75      93.0        0.75\\n\",\n       \"3       Naboo       165.0          0.25     50.25        0.25\\n\",\n       \"..        ...         ...           ...       ...         ...\\n\",\n       \"4       Naboo       183.0           0.5      70.5         0.5\\n\",\n       \"142    Umbara       178.0           0.5      48.0         0.5\\n\",\n       \"143    Umbara       178.0          0.75      48.0        0.75\\n\",\n       \"144    Utapau       206.0          0.25      80.0        0.25\\n\",\n       \"145    Utapau       206.0           0.5      80.0         0.5\\n\",\n       \"146    Utapau       206.0          0.75      80.0        0.75\\n\",\n       \"\\n\",\n       \"[147 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"(\\n\",\n    \"    starwars\\n\",\n    \"    >> group_by(f.homeworld)\\n\",\n    \"    >> reframe(\\n\",\n    \"        across(c(f.height, f.mass), quantile_df)\\n\",\n    \"    )\\n\",\n    \")\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"datar-TA_GutPO-py3.12\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/relocate.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:21.732360Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:21.731652Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.625834Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.625374Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frelocate.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ relocate</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### change column positions\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/relocate.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Columns to rename and move  \\n\",\n       \"&emsp;&emsp;`_before`: and  \\n\",\n       \"&emsp;&emsp;`_after`: Destination. Supplying neither will move columns to  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;the left-hand side; specifying both is an error.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;An object of the same type as .data. The output has the following  \\n\",\n       \"&emsp;&emsp;properties:  \\n\",\n       \"&emsp;&emsp;- Rows are not affected.\\n\",\n       \"&emsp;&emsp;- The same columns appear in the output, but (usually) in a\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;different place.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;- Data frame attributes are preserved.\\n\",\n       \"&emsp;&emsp;- Groups are not affected\\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/relocate.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(relocate)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.631741Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.631056Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.790437Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.789722Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b       c        d        e        f\\n\",\n       \"  <int64> <int64> <int64> <object> <object> <object>\\n\",\n       \"0       1       1       1        a        a        a\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(a=1, b=1, c=1, d='a', e='a', f='a')\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.796355Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.795776Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.896513Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.896885Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         f       a       b       c        d        e\\n\",\n       \"  <object> <int64> <int64> <int64> <object> <object>\\n\",\n       \"0        a       1       1       1        a        a\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(f.f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.910066Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.909405Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.912880Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.912375Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        b       c       a        d        e        f\\n\",\n       \"  <int64> <int64> <int64> <object> <object> <object>\\n\",\n       \"0       1       1       1        a        a        a\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(f.a, _after = f.c)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.926072Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.925379Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.928115Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.928506Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        f       b       c        d        e\\n\",\n       \"  <int64> <object> <int64> <int64> <object> <object>\\n\",\n       \"0       1        a       1       1        a        a\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(f.f, _before = f.b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.943207Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.942267Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.946422Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.946819Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        b       c        d        e        f       a\\n\",\n       \"  <int64> <int64> <object> <object> <object> <int64>\\n\",\n       \"0       1       1        a        a        a       1\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(f.a, _after = last_col())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.955752Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.955048Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:22.964921Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:22.964476Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>ff</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        ff       a       b       c        d        e\\n\",\n       \"  <object> <int64> <int64> <int64> <object> <object>\\n\",\n       \"0        a       1       1       1        a        a\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(ff=f.f)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:22.971451Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:22.970885Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.001622Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.002195Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         d        e        f       a       b       c\\n\",\n       \"  <object> <object> <object> <int64> <int64> <int64>\\n\",\n       \"0        a        a        a       1       1       1\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(where(is_character))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.018946Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.017664Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.022865Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.022420Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         d        e        f       a       b       c\\n\",\n       \"  <object> <object> <object> <int64> <int64> <int64>\\n\",\n       \"0        a        a        a       1       1       1\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(where(is_numeric), _after = last_col())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.041431Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.040645Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.044616Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.045079Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>e</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>f</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        e       b       c        d        f\\n\",\n       \"  <int64> <object> <int64> <int64> <object> <object>\\n\",\n       \"0       1        a       1       1        a        a\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> relocate(any_of(c(\\\"a\\\", \\\"e\\\", \\\"i\\\", \\\"o\\\", \\\"u\\\")))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.049926Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.049342Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.072350Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.072760Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b       c        d\\n\",\n       \"  <int64> <object> <int64> <object>\\n\",\n       \"0       1        a       1        a\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df2 = tibble(a=1, b='a', c=1, d='a')\\n\",\n    \"df2\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.090464Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.089707Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.094341Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.093807Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         b        d       a       c\\n\",\n       \"  <object> <object> <int64> <int64>\\n\",\n       \"0        a        a       1       1\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df2 >> relocate(where(is_numeric), _after = where(is_character))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.110338Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.109601Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.113543Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.112915Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       c        b        d\\n\",\n       \"  <int64> <int64> <object> <object>\\n\",\n       \"0       1       1        a        a\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df2 >> relocate(where(is_numeric), _before = where(is_character))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:23.127291Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:23.126686Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:23.129514Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:23.130106Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b        d       c\\n\",\n       \"  <int64> <object> <object> <int64>\\n\",\n       \"0       1        a        a       1\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df2 >> relocate(f.d, _after=1)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/rename.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"1dec8f90\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:06.479313Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:06.478179Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.420124Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.420518Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frename.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rename</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Rename columns\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rename.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Columns to rename  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with new names  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rename_with</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Rename columns with a function\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rename.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`_fn`: A function to apply to column names  \\n\",\n       \"&emsp;&emsp;`*args`: the columns to rename and non-keyword arguments for the `_fn`.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If `*args` is not provided, then assuming all columns, and  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;no non-keyword arguments are allowed to pass to the function, use  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;keyword arguments instead.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`**kwargs`: keyword arguments for `_fn`  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with new names  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/rename.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(rename, rename_with)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"36bdaa38\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.526873Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.526038Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.575744Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.576170Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>petal_length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  petal_length  Petal_Width    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rename(iris, petal_length='Petal_Length')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"a176778e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.621858Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.620916Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.637453Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.637898Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>SEPAL_LENGTH</th>\\n\",\n       \"      <th>SEPAL_WIDTH</th>\\n\",\n       \"      <th>PETAL_LENGTH</th>\\n\",\n       \"      <th>PETAL_WIDTH</th>\\n\",\n       \"      <th>SPECIES</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     SEPAL_LENGTH  SEPAL_WIDTH  PETAL_LENGTH  PETAL_WIDTH    SPECIES\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rename_with(iris, str.upper)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"e61348e4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.675212Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.673704Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.686307Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.686788Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>PETAL_LENGTH</th>\\n\",\n       \"      <th>PETAL_WIDTH</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  PETAL_LENGTH  PETAL_WIDTH    Species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> rename_with(str.upper, starts_with(\\\"Petal\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"57f026b4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.717434Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.716756Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.726286Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.726840Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>sepal.length</th>\\n\",\n       \"      <th>sepal.width</th>\\n\",\n       \"      <th>petal.length</th>\\n\",\n       \"      <th>petal.width</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     sepal.length  sepal.width  petal.length  petal.width    species\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> rename_with(lambda x: x.replace('_', '.').lower())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"f9cee963\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:07.750098Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:07.749436Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:07.766596Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:07.767206Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Sp</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width         Sp\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>   <object>\\n\",\n       \"0             5.1          3.5           1.4          0.2     setosa\\n\",\n       \"1             4.9          3.0           1.4          0.2     setosa\\n\",\n       \"2             4.7          3.2           1.3          0.2     setosa\\n\",\n       \"3             4.6          3.1           1.5          0.2     setosa\\n\",\n       \"..            ...          ...           ...          ...        ...\\n\",\n       \"4             5.0          3.6           1.4          0.2     setosa\\n\",\n       \"145           6.7          3.0           5.2          2.3  virginica\\n\",\n       \"146           6.3          2.5           5.0          1.9  virginica\\n\",\n       \"147           6.5          3.0           5.2          2.0  virginica\\n\",\n       \"148           6.2          3.4           5.4          2.3  virginica\\n\",\n       \"149           5.9          3.0           5.1          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# names can be selected by indexes\\n\",\n    \"iris >> rename(Sp=4)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/replace_na.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"82eadf3d\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:37.957391Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:37.956741Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.779988Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.780414Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Freplace_na.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ replace_na</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Replace NA with a value\\n\",\n       \"\\n\",\n       \"This function can be also used not as a verb. As a function called as  \\n\",\n       \"an argument in a verb, data is passed implicitly. Then one could  \\n\",\n       \"pass data_or_replace as the data to replace.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: The data piped in  \\n\",\n       \"&emsp;&emsp;`data_or_replace`: When called as argument of a verb, this is the  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;data to replace. Otherwise this is the replacement.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`replace`: The value to replace with  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Can only be a scalar or dict for data frame.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;So replace NA with a list is not supported yet.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Corresponding data with NAs replaced  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/replace_na.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(replace_na)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"4579e780\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.790243Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.789604Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.927028Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.927430Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\\n\",\n       \"1       2.0  unknown\\n\",\n       \"2       0.0        b\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(1, 2, NA), y = c(\\\"a\\\", NA, \\\"b\\\"))\\n\",\n    \"df >> replace_na(dict(x = 0, y = \\\"unknown\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"93218909\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.958579Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.937640Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.961801Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.962293Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.0</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x        y\\n\",\n       \"  <float64> <object>\\n\",\n       \"0       1.0        a\\n\",\n       \"1       2.0      NaN\\n\",\n       \"2       0.0        b\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(x = replace_na(f.x, 0))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"1c89dd6f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.972568Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.971323Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.978260Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.977575Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0    1.0\\n\",\n       \"1    2.0\\n\",\n       \"2    0.0\\n\",\n       \"Name: x, dtype: float64\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df.x >> replace_na(0)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"1a09cddb\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:38.985981Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:38.985058Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:38.992882Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:38.993383Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0          a\\n\",\n       \"1    unknown\\n\",\n       \"2          b\\n\",\n       \"Name: y, dtype: object\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df.y >> replace_na(\\\"unknown\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"e31ed3fa\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:39.001429Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:39.000841Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:39.022168Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:39.021142Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>[1, 2, 3, 4, 5]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                                              z\\n\",\n       \"                                       <object>\\n\",\n       \"0                               [1, 2, 3, 4, 5]\\n\",\n       \"1                                             5\\n\",\n       \"2  [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df_list = tibble(z = [seq(1,5), NULL, seq(10,20)])\\n\",\n    \"df_list >> replace_na({'z': 5}) # replace with a list not supported yet\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/rownames.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:24.723831Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:24.723166Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.091401Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.091877Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frownames.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ has_rownames</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Detect if a data frame has row names\\n\",\n       \"\\n\",\n       \"Aliases `has_index`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The data frame to check  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;True if the data frame has index otherwise False.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ remove_rownames</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Remove the index/rownames of a data frame\\n\",\n       \"\\n\",\n       \"Aliases `remove_index`, `drop_index`, `remove_rownames`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The data frame  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The data frame with index removed  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rownames_to_column</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add rownames as a column\\n\",\n       \"\\n\",\n       \"Aliases `index_to_column`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The data frame  \\n\",\n       \"&emsp;&emsp;`var`: The name of the column  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The data frame with rownames added as one column. Note that the  \\n\",\n       \"&emsp;&emsp;original index is removed.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rowid_to_column</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Add rownames as a column\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The data frame  \\n\",\n       \"&emsp;&emsp;`var`: The name of the column  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The data frame with row ids added as one column.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ column_to_rownames</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Set rownames/index with one column, and remove it\\n\",\n       \"\\n\",\n       \"Aliases `column_to_index`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: The data frame  \\n\",\n       \"&emsp;&emsp;`var`: The column to conver to the rownames  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The data frame with the column converted to rownames  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tibble.tidyverse.org/reference/add_row.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.tibble import *\\n\",\n    \"from datar.base import head\\n\",\n    \"from datar.data import mtcars, iris\\n\",\n    \"\\n\",\n    \"nb_header(has_rownames, remove_rownames, rownames_to_column, rowid_to_column, column_to_rownames, book='rownames')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.100163Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.099438Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.104815Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.105311Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"True\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"has_rownames(mtcars)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.111548Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.110098Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.116011Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.116393Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"False\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"has_rownames(iris)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.125381Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.124718Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.130194Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.129526Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"False\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"remove_rownames(mtcars) >> has_rownames()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.135636Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.135017Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.340681Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.341035Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>car</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>Mazda RX4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>Mazda RX4 Wag</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>Datsun 710</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>Hornet 4 Drive</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>Hornet Sportabout</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>Valiant</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>Duster 360</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>Merc 240D</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>Merc 230</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>Merc 280</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>Merc 280C</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>Merc 450SE</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>Merc 450SL</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>Merc 450SLC</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>Cadillac Fleetwood</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>Lincoln Continental</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>Chrysler Imperial</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>Fiat 128</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>Honda Civic</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>Toyota Corolla</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>Toyota Corona</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>Dodge Challenger</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>AMC Javelin</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>Camaro Z28</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>Pontiac Firebird</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>Fiat X1-9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>Porsche 914-2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>Lotus Europa</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>Ford Pantera L</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>Ferrari Dino</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>Maserati Bora</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>Volvo 142E</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mpg                  car     cyl      disp      hp      drat  \\\\\\n\",\n       \"   <float64>             <object> <int64> <float64> <int64> <float64>   \\n\",\n       \"0       21.0            Mazda RX4       6     160.0     110      3.90   \\n\",\n       \"1       21.0        Mazda RX4 Wag       6     160.0     110      3.90   \\n\",\n       \"2       22.8           Datsun 710       4     108.0      93      3.85   \\n\",\n       \"3       21.4       Hornet 4 Drive       6     258.0     110      3.08   \\n\",\n       \"4       18.7    Hornet Sportabout       8     360.0     175      3.15   \\n\",\n       \"5       18.1              Valiant       6     225.0     105      2.76   \\n\",\n       \"6       14.3           Duster 360       8     360.0     245      3.21   \\n\",\n       \"7       24.4            Merc 240D       4     146.7      62      3.69   \\n\",\n       \"8       22.8             Merc 230       4     140.8      95      3.92   \\n\",\n       \"9       19.2             Merc 280       6     167.6     123      3.92   \\n\",\n       \"10      17.8            Merc 280C       6     167.6     123      3.92   \\n\",\n       \"11      16.4           Merc 450SE       8     275.8     180      3.07   \\n\",\n       \"12      17.3           Merc 450SL       8     275.8     180      3.07   \\n\",\n       \"13      15.2          Merc 450SLC       8     275.8     180      3.07   \\n\",\n       \"14      10.4   Cadillac Fleetwood       8     472.0     205      2.93   \\n\",\n       \"15      10.4  Lincoln Continental       8     460.0     215      3.00   \\n\",\n       \"16      14.7    Chrysler Imperial       8     440.0     230      3.23   \\n\",\n       \"17      32.4             Fiat 128       4      78.7      66      4.08   \\n\",\n       \"18      30.4          Honda Civic       4      75.7      52      4.93   \\n\",\n       \"19      33.9       Toyota Corolla       4      71.1      65      4.22   \\n\",\n       \"20      21.5        Toyota Corona       4     120.1      97      3.70   \\n\",\n       \"21      15.5     Dodge Challenger       8     318.0     150      2.76   \\n\",\n       \"22      15.2          AMC Javelin       8     304.0     150      3.15   \\n\",\n       \"23      13.3           Camaro Z28       8     350.0     245      3.73   \\n\",\n       \"24      19.2     Pontiac Firebird       8     400.0     175      3.08   \\n\",\n       \"25      27.3            Fiat X1-9       4      79.0      66      4.08   \\n\",\n       \"26      26.0        Porsche 914-2       4     120.3      91      4.43   \\n\",\n       \"27      30.4         Lotus Europa       4      95.1     113      3.77   \\n\",\n       \"28      15.8       Ford Pantera L       8     351.0     264      4.22   \\n\",\n       \"29      19.7         Ferrari Dino       6     145.0     175      3.62   \\n\",\n       \"30      15.0        Maserati Bora       8     301.0     335      3.54   \\n\",\n       \"31      21.4           Volvo 142E       4     121.0     109      4.11   \\n\",\n       \"\\n\",\n       \"          wt      qsec      vs      am    gear    carb  \\n\",\n       \"   <float64> <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"0      2.620     16.46       0       1       4       4  \\n\",\n       \"1      2.875     17.02       0       1       4       4  \\n\",\n       \"2      2.320     18.61       1       1       4       1  \\n\",\n       \"3      3.215     19.44       1       0       3       1  \\n\",\n       \"4      3.440     17.02       0       0       3       2  \\n\",\n       \"5      3.460     20.22       1       0       3       1  \\n\",\n       \"6      3.570     15.84       0       0       3       4  \\n\",\n       \"7      3.190     20.00       1       0       4       2  \\n\",\n       \"8      3.150     22.90       1       0       4       2  \\n\",\n       \"9      3.440     18.30       1       0       4       4  \\n\",\n       \"10     3.440     18.90       1       0       4       4  \\n\",\n       \"11     4.070     17.40       0       0       3       3  \\n\",\n       \"12     3.730     17.60       0       0       3       3  \\n\",\n       \"13     3.780     18.00       0       0       3       3  \\n\",\n       \"14     5.250     17.98       0       0       3       4  \\n\",\n       \"15     5.424     17.82       0       0       3       4  \\n\",\n       \"16     5.345     17.42       0       0       3       4  \\n\",\n       \"17     2.200     19.47       1       1       4       1  \\n\",\n       \"18     1.615     18.52       1       1       4       2  \\n\",\n       \"19     1.835     19.90       1       1       4       1  \\n\",\n       \"20     2.465     20.01       1       0       3       1  \\n\",\n       \"21     3.520     16.87       0       0       3       2  \\n\",\n       \"22     3.435     17.30       0       0       3       2  \\n\",\n       \"23     3.840     15.41       0       0       3       4  \\n\",\n       \"24     3.845     17.05       0       0       3       2  \\n\",\n       \"25     1.935     18.90       1       1       4       1  \\n\",\n       \"26     2.140     16.70       0       1       5       2  \\n\",\n       \"27     1.513     16.90       1       1       5       2  \\n\",\n       \"28     3.170     14.50       0       1       5       4  \\n\",\n       \"29     2.770     15.50       0       1       5       6  \\n\",\n       \"30     3.570     14.60       0       1       5       8  \\n\",\n       \"31     2.780     18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars_tbl = rownames_to_column(mtcars, var=\\\"car\\\") \\n\",\n    \"mtcars_tbl\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.372381Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.371864Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.377366Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.379492Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                  <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Mazda RX4              21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag          21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Datsun 710             22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Hornet 4 Drive         21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Hornet Sportabout      18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"\\n\",\n       \"                       qsec      vs      am    gear    carb  \\n\",\n       \"                  <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4             16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag         17.02       0       1       4       4  \\n\",\n       \"Datsun 710            18.61       1       1       4       1  \\n\",\n       \"Hornet 4 Drive        19.44       1       0       3       1  \\n\",\n       \"Hornet Sportabout     17.02       0       0       3       2  \\n\",\n       \"Valiant               20.22       1       0       3       1  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"column_to_rownames(mtcars_tbl, var = \\\"car\\\") >> head()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:27.415514Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:27.414987Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:27.421179Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:27.421552Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>rowid</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>1.7</td>\\n\",\n       \"      <td>0.4</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   Sepal_Length   rowid  Sepal_Width  Petal_Length  Petal_Width  Species\\n\",\n       \"      <float64> <int64>    <float64>     <float64>    <float64> <object>\\n\",\n       \"0           5.1       0          3.5           1.4          0.2   setosa\\n\",\n       \"1           4.9       1          3.0           1.4          0.2   setosa\\n\",\n       \"2           4.7       2          3.2           1.3          0.2   setosa\\n\",\n       \"3           4.6       3          3.1           1.5          0.2   setosa\\n\",\n       \"4           5.0       4          3.6           1.4          0.2   setosa\\n\",\n       \"5           5.4       5          3.9           1.7          0.4   setosa\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Adding rowid as a column --------------------------------------------\\n\",\n    \"rowid_to_column(iris) >> head()\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"interpreter\": {\n   \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n  },\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.7.8 64-bit ('base': conda)\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/rows.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.915581Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.913314Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.982697Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.983123Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frows.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rows_insert</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Insert rows from y into x\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rows.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: An unnamed character vector giving the key columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The key columns must exist in both x and y.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Keys typically uniquely identify each row, but this is only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;enforced for the key values of y  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;By default, we use the first column in y, since the first column is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a reasonable place to put an identifier variable.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`conflict`: How to handle conflicts  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"error\\\": Throw an error\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"ignore\\\": Ignore conflicts\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If x and y are not from the same data source, and copy is TRUE,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then y will be copied into the same src as x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This allows you to join tables across srcs, but it is a potentially  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;expensive operation so you must opt into it.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`in_place`: Should x be modified in place?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This may not be supported, depending on the backend implementation.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with all existing rows and potentially new rows  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rows_update</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Update rows in x with values from y\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rows.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: An unnamed character vector giving the key columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The key columns must exist in both x and y.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Keys typically uniquely identify each row, but this is only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;enforced for the key values of y  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;By default, we use the first column in y, since the first column is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a reasonable place to put an identifier variable.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`unmatched`: how should keys in y that are unmatched by the keys  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in x be handled?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;One of -  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"error\\\", the default, will error if there are any keys in y that  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;are unmatched by the keys in x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"ignore\\\" will ignore rows in y with keys that are unmatched  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by the keys in x.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If x and y are not from the same data source, and copy is TRUE,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then y will be copied into the same src as x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This allows you to join tables across srcs, but it is a potentially  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;expensive operation so you must opt into it.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`in_place`: Should x be modified in place?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This may not be supported, depending on the backend implementation.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with all existing rows and potentially new rows  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rows_patch</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Patch rows in x with values from y\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rows.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: An unnamed character vector giving the key columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The key columns must exist in both x and y.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Keys typically uniquely identify each row, but this is only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;enforced for the key values of y  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;By default, we use the first column in y, since the first column is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a reasonable place to put an identifier variable.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`unmatched`: how should keys in y that are unmatched by the keys  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in x be handled?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;One of -  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"error\\\", the default, will error if there are any keys in y that  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;are unmatched by the keys in x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"ignore\\\" will ignore rows in y with keys that are unmatched  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by the keys in x.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If x and y are not from the same data source, and copy is TRUE,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then y will be copied into the same src as x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This allows you to join tables across srcs, but it is a potentially  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;expensive operation so you must opt into it.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`in_place`: Should x be modified in place?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This may not be supported, depending on the backend implementation.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with NA values overwritten and the number of rows preserved  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rows_upsert</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Upsert rows in x with values from y\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rows.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: An unnamed character vector giving the key columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The key columns must exist in both x and y.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Keys typically uniquely identify each row, but this is only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;enforced for the key values of y  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;By default, we use the first column in y, since the first column is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a reasonable place to put an identifier variable.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If x and y are not from the same data source, and copy is TRUE,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then y will be copied into the same src as x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This allows you to join tables across srcs, but it is a potentially  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;expensive operation so you must opt into it.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`in_place`: Should x be modified in place?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This may not be supported, depending on the backend implementation.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with inserted or updated depending on whether or not  \\n\",\n       \"&emsp;&emsp;the key value in y already exists in x. Key values in y must be unique.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rows_delete</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Delete rows in x that match keys in y\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rows.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"&emsp;&emsp;`by`: An unnamed character vector giving the key columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The key columns must exist in both x and y.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Keys typically uniquely identify each row, but this is only  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;enforced for the key values of y  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;By default, we use the first column in y, since the first column is  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;a reasonable place to put an identifier variable.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`unmatched`: how should keys in y that are unmatched by the keys  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;in x be handled?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;One of -  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"error\\\", the default, will error if there are any keys in y that  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;are unmatched by the keys in x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;\\\"ignore\\\" will ignore rows in y with keys that are unmatched  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;by the keys in x.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`copy`: If x and y are not from the same data source, and copy is TRUE,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then y will be copied into the same src as x.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This allows you to join tables across srcs, but it is a potentially  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;expensive operation so you must opt into it.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`in_place`: Should x be modified in place?  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;This may not be supported, depending on the backend implementation.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with rows deleted  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"%run nb_helpers.py\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(\\n\",\n    \"    rows_insert, \\n\",\n    \"    rows_update, \\n\",\n    \"    rows_patch, \\n\",\n    \"    rows_upsert, \\n\",\n    \"    rows_delete, \\n\",\n    \"    book='rows'\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.999613Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.998991Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.347691Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.348096Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        b       1.5\\n\",\n       \"2       3      NaN       2.5\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"data = tibble(a = seq(1, 3), b = c(letters[[0, 1]], NA), c = [.5, 1.5, 2.5])\\n\",\n    \"data\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.450878Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.449990Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.756575Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.757071Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:14][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        b       1.5\\n\",\n       \"2       3      NaN       2.5\\n\",\n       \"3       4        z       NaN\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_insert(data, tibble(a = 4, b = \\\"z\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.778078Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.776324Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.809105Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.809525Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:14][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] Attempting to insert duplicate rows.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    rows_insert(data, tibble(a = 3, b = \\\"z\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.849701Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.849124Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.882173Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.882617Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:15][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        z       1.5\\n\",\n       \"2       3        z       2.5\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_update(data, tibble(a = [2,3], b = \\\"z\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.939586Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.939002Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.954290Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.954712Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        z       1.5\\n\",\n       \"2       3        z       2.5\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_update(data, tibble(b = \\\"z\\\", a = [2,3]), by = \\\"a\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.990975Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.990382Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:13.079359Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:13.080018Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:17][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        b       1.5\\n\",\n       \"2       3        z       2.5\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_patch(data, tibble(a = [2,3], b = \\\"z\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:13.145161Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:13.143281Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:13.158501Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:13.158888Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:18][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\\n\",\n       \"1       2        z       1.5\\n\",\n       \"2       3        z       2.5\\n\",\n       \"3       4        z       NaN\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_upsert(data, tibble(a = seq(2, 4), b = \\\"z\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:13.181744Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:13.181046Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:13.219352Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:13.219753Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:18][datar][   INFO] Matching, by='a'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_delete(data, tibble(a = [2, 3]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:13.247095Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:13.246408Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:13.280047Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:13.280487Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:22:19][datar][   INFO] Matching, by='a'\\n\",\n      \"[2022-12-02 14:22:19][datar][   INFO] Ignoring extra columns: ['b']\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b         c\\n\",\n       \"  <int64> <object> <float64>\\n\",\n       \"0       1        a       0.5\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"rows_delete(data, tibble(a = [2, 3], b = \\\"b\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:13.349257Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:13.348629Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:13.366160Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:13.366676Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] Attempting to delete missing rows.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    rows_delete(data, tibble(a = [2,3], b = \\\"b\\\"), by = c(\\\"a\\\", \\\"b\\\"))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "docs/notebooks/rowwise.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:08.630104Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:08.629477Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:09.661020Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:09.658387Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Frowwise.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ rowwise</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Create a rowwise frame\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/rowwise.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*cols`: Columns to make rowwise.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A rowwise frame  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/rowwise.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(rowwise)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:09.684543Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:09.683910Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:09.995217Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:09.995615Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.740427</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"      <td>0.796442</td>\\n\",\n       \"      <td>0.752977</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.420291</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"      <td>0.681690</td>\\n\",\n       \"      <td>0.372989</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.983908</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"      <td>0.508663</td>\\n\",\n       \"      <td>0.666599</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.059662</td>\\n\",\n       \"      <td>0.483942</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"      <td>0.196883</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"      <td>0.735485</td>\\n\",\n       \"      <td>0.868933</td>\\n\",\n       \"      <td>0.630834</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"      <td>0.502597</td>\\n\",\n       \"      <td>0.424734</td>\\n\",\n       \"      <td>0.370489</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise:  (n=6)\"\n      ],\n      \"text/plain\": [\n       \"          x         y         z         m\\n\",\n       \"  <float64> <float64> <float64> <float64>\\n\",\n       \"0  0.740427  0.722062  0.796442  0.752977\\n\",\n       \"1  0.420291  0.016988  0.681690  0.372989\\n\",\n       \"2  0.983908  0.507227  0.508663  0.666599\\n\",\n       \"3  0.059662  0.483942  0.047045  0.196883\\n\",\n       \"4  0.288083  0.735485  0.868933  0.630834\\n\",\n       \"5  0.184138  0.502597  0.424734  0.370489\\n\",\n       \"[TibbleRowwise:  (n=6)]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=runif(6), y=runif(6), z=runif(6))\\n\",\n    \"\\n\",\n    \"df >> rowwise() >> mutate(m=mean(c_across(c(f.x, f.y, f.z)))) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.067015Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.066388Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:10.080326Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:10.080713Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.740427</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"      <td>0.796442</td>\\n\",\n       \"      <td>0.752977</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.420291</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"      <td>0.681690</td>\\n\",\n       \"      <td>0.372989</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.983908</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"      <td>0.508663</td>\\n\",\n       \"      <td>0.666599</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.059662</td>\\n\",\n       \"      <td>0.483942</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"      <td>0.196883</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"      <td>0.735485</td>\\n\",\n       \"      <td>0.868933</td>\\n\",\n       \"      <td>0.630834</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"      <td>0.502597</td>\\n\",\n       \"      <td>0.424734</td>\\n\",\n       \"      <td>0.370489</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise:  (n=6)\"\n      ],\n      \"text/plain\": [\n       \"          x         y         z         m\\n\",\n       \"  <float64> <float64> <float64> <float64>\\n\",\n       \"0  0.740427  0.722062  0.796442  0.752977\\n\",\n       \"1  0.420291  0.016988  0.681690  0.372989\\n\",\n       \"2  0.983908  0.507227  0.508663  0.666599\\n\",\n       \"3  0.059662  0.483942  0.047045  0.196883\\n\",\n       \"4  0.288083  0.735485  0.868933  0.630834\\n\",\n       \"5  0.184138  0.502597  0.424734  0.370489\\n\",\n       \"[TibbleRowwise:  (n=6)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> rowwise() >> mutate(m=mean(c_across(f[f.x:])))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.157870Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.157301Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:10.167496Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:10.167879Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.740427</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"      <td>0.796442</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.420291</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"      <td>0.681690</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.983908</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"      <td>0.508663</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.059662</td>\\n\",\n       \"      <td>0.483942</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"      <td>0.735485</td>\\n\",\n       \"      <td>0.868933</td>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"      <td>0.502597</td>\\n\",\n       \"      <td>0.424734</td>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise:  (n=6)\"\n      ],\n      \"text/plain\": [\n       \"          x         y         z         m\\n\",\n       \"  <float64> <float64> <float64> <float64>\\n\",\n       \"0  0.740427  0.722062  0.796442  0.722062\\n\",\n       \"1  0.420291  0.016988  0.681690  0.016988\\n\",\n       \"2  0.983908  0.507227  0.508663  0.507227\\n\",\n       \"3  0.059662  0.483942  0.047045  0.047045\\n\",\n       \"4  0.288083  0.735485  0.868933  0.288083\\n\",\n       \"5  0.184138  0.502597  0.424734  0.184138\\n\",\n       \"[TibbleRowwise:  (n=6)]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> rowwise() >> mutate(m=min(c_across([f.x, f.y, f.z]))) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.231704Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.230994Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:10.235604Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:10.234881Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.740427</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"      <td>0.796442</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.420291</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"      <td>0.681690</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.983908</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"      <td>0.508663</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.059662</td>\\n\",\n       \"      <td>0.483942</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"      <td>0.735485</td>\\n\",\n       \"      <td>0.868933</td>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"      <td>0.502597</td>\\n\",\n       \"      <td>0.424734</td>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise:  (n=6)\"\n      ],\n      \"text/plain\": [\n       \"          x         y         z         m\\n\",\n       \"  <float64> <float64> <float64> <float64>\\n\",\n       \"0  0.740427  0.722062  0.796442  0.722062\\n\",\n       \"1  0.420291  0.016988  0.681690  0.016988\\n\",\n       \"2  0.983908  0.507227  0.508663  0.507227\\n\",\n       \"3  0.059662  0.483942  0.047045  0.047045\\n\",\n       \"4  0.288083  0.735485  0.868933  0.288083\\n\",\n       \"5  0.184138  0.502597  0.424734  0.184138\\n\",\n       \"[TibbleRowwise:  (n=6)]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> rowwise() >> mutate(m=min(c_across(f[f.x:]))) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.245426Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.244596Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:10.286588Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:10.287010Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>m</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.740427</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"      <td>0.796442</td>\\n\",\n       \"      <td>0.722062</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.420291</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"      <td>0.681690</td>\\n\",\n       \"      <td>0.016988</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.983908</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"      <td>0.508663</td>\\n\",\n       \"      <td>0.507227</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.059662</td>\\n\",\n       \"      <td>0.483942</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"      <td>0.047045</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"      <td>0.735485</td>\\n\",\n       \"      <td>0.868933</td>\\n\",\n       \"      <td>0.288083</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"      <td>0.502597</td>\\n\",\n       \"      <td>0.424734</td>\\n\",\n       \"      <td>0.184138</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x         y         z         m\\n\",\n       \"  <float64> <float64> <float64> <float64>\\n\",\n       \"0  0.740427  0.722062  0.796442  0.722062\\n\",\n       \"1  0.420291  0.016988  0.681690  0.016988\\n\",\n       \"2  0.983908  0.507227  0.508663  0.507227\\n\",\n       \"3  0.059662  0.483942  0.047045  0.047045\\n\",\n       \"4  0.288083  0.735485  0.868933  0.288083\\n\",\n       \"5  0.184138  0.502597  0.424734  0.184138\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> mutate(m = pmin(f.x, f.y, f.z))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.296858Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.296263Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:10.347572Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:10.348035Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>sim</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"      <th>mean</th>\\n\",\n       \"      <th>sd</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>[1.8805605045050253]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>[-2.39100601732882, 2.6882535131773917]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>[-0.8909366235397611, 2.2500642263497337, 4.00...</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleRowwise: sim (n=3)\"\n      ],\n      \"text/plain\": [\n       \"      sim       n    mean      sd  \\\\\\n\",\n       \"  <int64> <int64> <int64> <int64>   \\n\",\n       \"0       1       1       1       1   \\n\",\n       \"1       2       2       2       4   \\n\",\n       \"2       3       3       1       2   \\n\",\n       \"\\n\",\n       \"                                                   z  \\n\",\n       \"                                            <object>  \\n\",\n       \"0                               [1.8805605045050253]  \\n\",\n       \"1            [-2.39100601732882, 2.6882535131773917]  \\n\",\n       \"2  [-0.8909366235397611, 2.2500642263497337, 4.00...  \\n\",\n       \"[TibbleRowwise: sim (n=3)]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"params = tibble(\\n\",\n    \"    sim=[1, 2, 3],\\n\",\n    \"    n=[1, 2, 3],\\n\",\n    \"    mean=[1, 2, 1],\\n\",\n    \"    sd=[1, 4, 2]\\n\",\n    \")\\n\",\n    \"\\n\",\n    \"params >> rowwise(f.sim) >> mutate(z=rnorm(f.n, f.mean, f.sd)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/select.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:13.675066Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:13.674338Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:14.751873Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:14.752267Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fselect.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ select</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Select columns from a data frame.\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/select.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: A list of columns to select  \\n\",\n       \"&emsp;&emsp;`**kwargs`: A list of columns to select  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with only the selected columns  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/select.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import starwars, iris\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(select)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:14.847610Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:14.847059Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:14.867059Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:14.867449Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 1 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      height\\n\",\n       \"   <float64>\\n\",\n       \"0      172.0\\n\",\n       \"1      167.0\\n\",\n       \"2       96.0\\n\",\n       \"3      202.0\\n\",\n       \"..       ...\\n\",\n       \"4      150.0\\n\",\n       \"82       NaN\\n\",\n       \"83       NaN\\n\",\n       \"84       NaN\\n\",\n       \"85       NaN\\n\",\n       \"86     165.0\\n\",\n       \"\\n\",\n       \"[87 rows x 1 columns]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> select(f.height)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:14.982599Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:14.982076Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.028171Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.026645Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 6 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Petal_Length  Petal_Width  Sepal_Width    Species          name     value\\n\",\n       \"        <float64>    <float64>    <float64>   <object>      <object> <float64>\\n\",\n       \"0             1.4          0.2          3.5     setosa  Sepal_Length       5.1\\n\",\n       \"1             1.4          0.2          3.0     setosa  Sepal_Length       4.9\\n\",\n       \"2             1.3          0.2          3.2     setosa  Sepal_Length       4.7\\n\",\n       \"3             1.5          0.2          3.1     setosa  Sepal_Length       4.6\\n\",\n       \"..            ...          ...          ...        ...           ...       ...\\n\",\n       \"4             1.4          0.2          3.6     setosa  Sepal_Length       5.0\\n\",\n       \"145           5.2          2.3          3.0  virginica  Sepal_Length       6.7\\n\",\n       \"146           5.0          1.9          2.5  virginica  Sepal_Length       6.3\\n\",\n       \"147           5.2          2.0          3.0  virginica  Sepal_Length       6.5\\n\",\n       \"148           5.4          2.3          3.4  virginica  Sepal_Length       6.2\\n\",\n       \"149           5.1          1.8          3.0  virginica  Sepal_Length       5.9\\n\",\n       \"\\n\",\n       \"[150 rows x 6 columns]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> pivot_longer(f['Sepal_Length'])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.052612Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.051434Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.068570Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.068973Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   homeworld    height      mass\\n\",\n       \"    <object> <float64> <float64>\\n\",\n       \"0   Tatooine     172.0      77.0\\n\",\n       \"1   Tatooine     167.0      75.0\\n\",\n       \"2      Naboo      96.0      32.0\\n\",\n       \"3   Tatooine     202.0     136.0\\n\",\n       \"..       ...       ...       ...\\n\",\n       \"4   Alderaan     150.0      49.0\\n\",\n       \"82       NaN       NaN       NaN\\n\",\n       \"83       NaN       NaN       NaN\\n\",\n       \"84       NaN       NaN       NaN\\n\",\n       \"85       NaN       NaN       NaN\\n\",\n       \"86     Naboo     165.0      45.0\\n\",\n       \"\\n\",\n       \"[87 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> select(f.homeworld, f.height, f.mass)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.113979Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.112741Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.136746Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.137480Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"      <td>Sepal_Length</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>295</th>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Petal_Length</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>296</th>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Petal_Length</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>297</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Petal_Length</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>298</th>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Petal_Length</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>299</th>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"      <td>Petal_Length</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>300 rows × 5 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Petal_Width  Sepal_Width    Species          name     value\\n\",\n       \"       <float64>    <float64>   <object>      <object> <float64>\\n\",\n       \"0            0.2          3.5     setosa  Sepal_Length       5.1\\n\",\n       \"1            0.2          3.0     setosa  Sepal_Length       4.9\\n\",\n       \"2            0.2          3.2     setosa  Sepal_Length       4.7\\n\",\n       \"3            0.2          3.1     setosa  Sepal_Length       4.6\\n\",\n       \"..           ...          ...        ...           ...       ...\\n\",\n       \"4            0.2          3.6     setosa  Sepal_Length       5.0\\n\",\n       \"295          2.3          3.0  virginica  Petal_Length       5.2\\n\",\n       \"296          1.9          2.5  virginica  Petal_Length       5.0\\n\",\n       \"297          2.0          3.0  virginica  Petal_Length       5.2\\n\",\n       \"298          2.3          3.4  virginica  Petal_Length       5.4\\n\",\n       \"299          1.8          3.0  virginica  Petal_Length       5.1\\n\",\n       \"\\n\",\n       \"[300 rows x 5 columns]\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> pivot_longer(c(f['Sepal_Length'], f['Petal_Length']))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.166669Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.166140Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.244625Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.245072Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>name</th>\\n\",\n       \"      <th>height</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>Luke Skywalker</td>\\n\",\n       \"      <td>172.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>C-3PO</td>\\n\",\n       \"      <td>167.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>R2-D2</td>\\n\",\n       \"      <td>96.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>Darth Vader</td>\\n\",\n       \"      <td>202.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>Leia Organa</td>\\n\",\n       \"      <td>150.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>Rey</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>Poe Dameron</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>BB8</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>Captain Phasma</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>Padmé Amidala</td>\\n\",\n       \"      <td>165.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 2 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"              name    height\\n\",\n       \"          <object> <float64>\\n\",\n       \"0   Luke Skywalker     172.0\\n\",\n       \"1            C-3PO     167.0\\n\",\n       \"2            R2-D2      96.0\\n\",\n       \"3      Darth Vader     202.0\\n\",\n       \"..             ...       ...\\n\",\n       \"4      Leia Organa     150.0\\n\",\n       \"82             Rey       NaN\\n\",\n       \"83     Poe Dameron       NaN\\n\",\n       \"84             BB8       NaN\\n\",\n       \"85  Captain Phasma       NaN\\n\",\n       \"86   Padmé Amidala     165.0\\n\",\n       \"\\n\",\n       \"[87 rows x 2 columns]\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> select(c[f.name:f.mass])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.289785Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.287507Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.399299Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.400062Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mass</th>\\n\",\n       \"      <th>hair_color</th>\\n\",\n       \"      <th>skin_color</th>\\n\",\n       \"      <th>eye_color</th>\\n\",\n       \"      <th>birth_year</th>\\n\",\n       \"      <th>sex</th>\\n\",\n       \"      <th>gender</th>\\n\",\n       \"      <th>homeworld</th>\\n\",\n       \"      <th>species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>77.0</td>\\n\",\n       \"      <td>blond</td>\\n\",\n       \"      <td>fair</td>\\n\",\n       \"      <td>blue</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>75.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>gold</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>112.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>32.0</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>white, blue</td>\\n\",\n       \"      <td>red</td>\\n\",\n       \"      <td>33.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>136.0</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>white</td>\\n\",\n       \"      <td>yellow</td>\\n\",\n       \"      <td>41.9</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>Tatooine</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>49.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>19.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Alderaan</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>hazel</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>male</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>black</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>none</td>\\n\",\n       \"      <td>masculine</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>Droid</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>unknown</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>45.0</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>light</td>\\n\",\n       \"      <td>brown</td>\\n\",\n       \"      <td>46.0</td>\\n\",\n       \"      <td>female</td>\\n\",\n       \"      <td>feminine</td>\\n\",\n       \"      <td>Naboo</td>\\n\",\n       \"      <td>Human</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>87 rows × 9 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        mass hair_color   skin_color eye_color  birth_year      sex  \\\\\\n\",\n       \"   <float64>   <object>     <object>  <object>   <float64> <object>   \\n\",\n       \"0       77.0      blond         fair      blue        19.0     male   \\n\",\n       \"1       75.0        NaN         gold    yellow       112.0     none   \\n\",\n       \"2       32.0        NaN  white, blue       red        33.0     none   \\n\",\n       \"3      136.0       none        white    yellow        41.9     male   \\n\",\n       \"..       ...        ...          ...       ...         ...      ...   \\n\",\n       \"4       49.0      brown        light     brown        19.0   female   \\n\",\n       \"82       NaN      brown        light     hazel         NaN   female   \\n\",\n       \"83       NaN      brown        light     brown         NaN     male   \\n\",\n       \"84       NaN       none         none     black         NaN     none   \\n\",\n       \"85       NaN    unknown      unknown   unknown         NaN      NaN   \\n\",\n       \"86      45.0      brown        light     brown        46.0   female   \\n\",\n       \"\\n\",\n       \"       gender homeworld  species  \\n\",\n       \"     <object>  <object> <object>  \\n\",\n       \"0   masculine  Tatooine    Human  \\n\",\n       \"1   masculine  Tatooine    Droid  \\n\",\n       \"2   masculine     Naboo    Droid  \\n\",\n       \"3   masculine  Tatooine    Human  \\n\",\n       \"..        ...       ...      ...  \\n\",\n       \"4    feminine  Alderaan    Human  \\n\",\n       \"82   feminine       NaN    Human  \\n\",\n       \"83  masculine       NaN    Human  \\n\",\n       \"84  masculine       NaN    Droid  \\n\",\n       \"85        NaN       NaN      NaN  \\n\",\n       \"86   feminine     Naboo    Human  \\n\",\n       \"\\n\",\n       \"[87 rows x 9 columns]\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"starwars >> select(~c[f.name:f.mass])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.457346Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.452299Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.501476Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.502130Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Width  Petal_Width    Species\\n\",\n       \"       <float64>    <float64>   <object>\\n\",\n       \"0            3.5          0.2     setosa\\n\",\n       \"1            3.0          0.2     setosa\\n\",\n       \"2            3.2          0.2     setosa\\n\",\n       \"3            3.1          0.2     setosa\\n\",\n       \"..           ...          ...        ...\\n\",\n       \"4            3.6          0.2     setosa\\n\",\n       \"145          3.0          2.3  virginica\\n\",\n       \"146          2.5          1.9  virginica\\n\",\n       \"147          3.0          2.0  virginica\\n\",\n       \"148          3.4          2.3  virginica\\n\",\n       \"149          3.0          1.8  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(~c(f['Sepal_Length'], f['Petal_Length']))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.541552Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.540955Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.610956Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.611531Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Petal_Length    Species\\n\",\n       \"        <float64>     <float64>   <object>\\n\",\n       \"0             5.1           1.4     setosa\\n\",\n       \"1             4.9           1.4     setosa\\n\",\n       \"2             4.7           1.3     setosa\\n\",\n       \"3             4.6           1.5     setosa\\n\",\n       \"..            ...           ...        ...\\n\",\n       \"4             5.0           1.4     setosa\\n\",\n       \"145           6.7           5.2  virginica\\n\",\n       \"146           6.3           5.0  virginica\\n\",\n       \"147           6.5           5.2  virginica\\n\",\n       \"148           6.2           5.4  virginica\\n\",\n       \"149           5.9           5.1  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(~ends_with(\\\"Width\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.634079Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.633392Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.656679Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.657084Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 1 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Petal_Width\\n\",\n       \"       <float64>\\n\",\n       \"0            0.2\\n\",\n       \"1            0.2\\n\",\n       \"2            0.2\\n\",\n       \"3            0.2\\n\",\n       \"..           ...\\n\",\n       \"4            0.2\\n\",\n       \"145          2.3\\n\",\n       \"146          1.9\\n\",\n       \"147          2.0\\n\",\n       \"148          2.3\\n\",\n       \"149          1.8\\n\",\n       \"\\n\",\n       \"[150 rows x 1 columns]\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(starts_with(\\\"Petal\\\") & ends_with(\\\"Width\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.683400Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.681889Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.707227Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.707622Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 3 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Petal_Length  Petal_Width  Sepal_Width\\n\",\n       \"        <float64>    <float64>    <float64>\\n\",\n       \"0             1.4          0.2          3.5\\n\",\n       \"1             1.4          0.2          3.0\\n\",\n       \"2             1.3          0.2          3.2\\n\",\n       \"3             1.5          0.2          3.1\\n\",\n       \"..            ...          ...          ...\\n\",\n       \"4             1.4          0.2          3.6\\n\",\n       \"145           5.2          2.3          3.0\\n\",\n       \"146           5.0          1.9          2.5\\n\",\n       \"147           5.2          2.0          3.0\\n\",\n       \"148           5.4          2.3          3.4\\n\",\n       \"149           5.1          1.8          3.0\\n\",\n       \"\\n\",\n       \"[150 rows x 3 columns]\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(starts_with(\\\"Petal\\\") | ends_with(\\\"Width\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.732248Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.731652Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.743883Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.744324Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 1 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Petal_Length\\n\",\n       \"        <float64>\\n\",\n       \"0             1.4\\n\",\n       \"1             1.4\\n\",\n       \"2             1.3\\n\",\n       \"3             1.5\\n\",\n       \"..            ...\\n\",\n       \"4             1.4\\n\",\n       \"145           5.2\\n\",\n       \"146           5.0\\n\",\n       \"147           5.2\\n\",\n       \"148           5.4\\n\",\n       \"149           5.1\\n\",\n       \"\\n\",\n       \"[150 rows x 1 columns]\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(starts_with(\\\"Petal\\\") & ~ends_with(\\\"Width\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.761579Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.760973Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.783958Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.784373Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Species</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>setosa</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>virginica</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 1 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       Species\\n\",\n       \"      <object>\\n\",\n       \"0       setosa\\n\",\n       \"1       setosa\\n\",\n       \"2       setosa\\n\",\n       \"3       setosa\\n\",\n       \"..         ...\\n\",\n       \"4       setosa\\n\",\n       \"145  virginica\\n\",\n       \"146  virginica\\n\",\n       \"147  virginica\\n\",\n       \"148  virginica\\n\",\n       \"149  virginica\\n\",\n       \"\\n\",\n       \"[150 rows x 1 columns]\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# select last column\\n\",\n    \"iris >> select(-1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.807075Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.806477Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.826834Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.827230Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 2 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Width  Petal_Length\\n\",\n       \"       <float64>     <float64>\\n\",\n       \"0            3.5           1.4\\n\",\n       \"1            3.0           1.4\\n\",\n       \"2            3.2           1.3\\n\",\n       \"3            3.1           1.5\\n\",\n       \"..           ...           ...\\n\",\n       \"4            3.6           1.4\\n\",\n       \"145          3.0           5.2\\n\",\n       \"146          2.5           5.0\\n\",\n       \"147          3.0           5.2\\n\",\n       \"148          3.4           5.4\\n\",\n       \"149          3.0           5.1\\n\",\n       \"\\n\",\n       \"[150 rows x 2 columns]\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"iris >> select(c[1:3])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:15.890597Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:15.889991Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:15.902226Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:15.904342Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>Sepal_Length</th>\\n\",\n       \"      <th>Sepal_Width</th>\\n\",\n       \"      <th>Petal_Length</th>\\n\",\n       \"      <th>Petal_Width</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>3.5</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4.7</td>\\n\",\n       \"      <td>3.2</td>\\n\",\n       \"      <td>1.3</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4.6</td>\\n\",\n       \"      <td>3.1</td>\\n\",\n       \"      <td>1.5</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>3.6</td>\\n\",\n       \"      <td>1.4</td>\\n\",\n       \"      <td>0.2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>145</th>\\n\",\n       \"      <td>6.7</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>146</th>\\n\",\n       \"      <td>6.3</td>\\n\",\n       \"      <td>2.5</td>\\n\",\n       \"      <td>5.0</td>\\n\",\n       \"      <td>1.9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>147</th>\\n\",\n       \"      <td>6.5</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.2</td>\\n\",\n       \"      <td>2.0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>148</th>\\n\",\n       \"      <td>6.2</td>\\n\",\n       \"      <td>3.4</td>\\n\",\n       \"      <td>5.4</td>\\n\",\n       \"      <td>2.3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>149</th>\\n\",\n       \"      <td>5.9</td>\\n\",\n       \"      <td>3.0</td>\\n\",\n       \"      <td>5.1</td>\\n\",\n       \"      <td>1.8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>150 rows × 4 columns</p>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     Sepal_Length  Sepal_Width  Petal_Length  Petal_Width\\n\",\n       \"        <float64>    <float64>     <float64>    <float64>\\n\",\n       \"0             5.1          3.5           1.4          0.2\\n\",\n       \"1             4.9          3.0           1.4          0.2\\n\",\n       \"2             4.7          3.2           1.3          0.2\\n\",\n       \"3             4.6          3.1           1.5          0.2\\n\",\n       \"..            ...          ...           ...          ...\\n\",\n       \"4             5.0          3.6           1.4          0.2\\n\",\n       \"145           6.7          3.0           5.2          2.3\\n\",\n       \"146           6.3          2.5           5.0          1.9\\n\",\n       \"147           6.5          3.0           5.2          2.0\\n\",\n       \"148           6.2          3.4           5.4          2.3\\n\",\n       \"149           5.9          3.0           5.1          1.8\\n\",\n       \"\\n\",\n       \"[150 rows x 4 columns]\"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# drop last column\\n\",\n    \"iris >> select(~c(-1))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "docs/notebooks/separate.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"005da05e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:18.766343Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:18.765294Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:19.764916Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:19.765324Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fseparate.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ separate</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Given either a regular expression or a vector of character positions,\\n\",\n       \"turns a single character column into multiple columns.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`col`: Column name or position.  \\n\",\n       \"&emsp;&emsp;`into`: Names of new variables to create as character vector.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use `None`/`NA`/`NULL` to omit the variable in the output.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`sep`: Separator between columns.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If str, `sep` is interpreted as a regular expression.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;The default value is a regular expression that matches  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;any sequence of non-alphanumeric values.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If int, `sep` is interpreted as character positions to split at.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`remove`: If TRUE, remove input column from output data frame.  \\n\",\n       \"&emsp;&emsp;`convert`: The universal type for the extracted columns or a dict for  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;individual ones  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Note that when given `TRUE`, `DataFrame.convert_dtypes()` is called,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;but it will not convert `str` to other types  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;(For example, `'1'` to `1`). You have to specify the dtype yourself.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`extra`: If sep is a character vector, this controls what happens when  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;there are too many pieces. There are three valid options:  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"warn\\\" (the default): emit a warning and drop extra values.\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"drop\\\": drop any extra values without a warning.\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"merge\\\": only splits at most length(into) times\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`fill`: If sep is a character vector, this controls what happens when  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;there are not enough pieces. There are three valid options:  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"warn\\\" (the default): emit a warning and fill from the right\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"right\\\": fill with missing values on the right\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"left\\\": fill with missing values on the left\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Dataframe with separated columns.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ separate_rows</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Separates the values and places each one in its own row.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: The dataframe  \\n\",\n       \"&emsp;&emsp;`*columns`: The columns to separate on  \\n\",\n       \"&emsp;&emsp;`sep`: Separator between columns.  \\n\",\n       \"&emsp;&emsp;`convert`: The universal type for the extracted columns or a dict for  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;individual ones  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Dataframe with rows separated and repeated.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/separate.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(separate, separate_rows)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"753fe6bf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:19.778843Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:19.778209Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.040544Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.041222Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         A        B\\n\",\n       \"  <object> <object>\\n\",\n       \"0      NaN      NaN\\n\",\n       \"1        x        y\\n\",\n       \"2        x        z\\n\",\n       \"3        y        z\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(NA, \\\"x.y\\\", \\\"x.z\\\", \\\"y.z\\\"))\\n\",\n    \"df >> separate(f.x, c(\\\"A\\\", \\\"B\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"1e4c018c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.062417Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.061661Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.068845Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.069252Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         B\\n\",\n       \"  <object>\\n\",\n       \"0      NaN\\n\",\n       \"1        y\\n\",\n       \"2        z\\n\",\n       \"3        z\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> separate(f.x, c(NA, \\\"B\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"053b5044\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.080729Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.080030Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.118557Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.118982Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:25:28][datar][WARNING] Expected 2 pieces. Additional pieces discarded in 1 rows ['x y z'].\\n\",\n      \"[2022-12-02 14:25:28][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['x'].\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b\\n\",\n       \"  <object> <object>\\n\",\n       \"0        x      NaN\\n\",\n       \"1        x        y\\n\",\n       \"2        x        y\\n\",\n       \"3      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(\\\"x\\\", \\\"x y\\\", \\\"x y z\\\", NA))\\n\",\n    \"df >> separate(f.x, c(\\\"a\\\", \\\"b\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"d7541e84\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.141111Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.140187Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.147100Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.147500Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b\\n\",\n       \"  <object> <object>\\n\",\n       \"0        x      NaN\\n\",\n       \"1        x        y\\n\",\n       \"2        x        y\\n\",\n       \"3      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> separate(f.x, c(\\\"a\\\", \\\"b\\\"), extra=\\\"drop\\\", fill=\\\"right\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"fb7a4e8c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.169036Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.168275Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.177192Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.177742Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>x</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y z</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b\\n\",\n       \"  <object> <object>\\n\",\n       \"0      NaN        x\\n\",\n       \"1        x        y\\n\",\n       \"2        x      y z\\n\",\n       \"3      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> separate(f.x, c(\\\"a\\\", \\\"b\\\"), extra=\\\"merge\\\", fill=\\\"left\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"204809bd\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.188461Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.187899Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.228915Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.229494Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:25:32][datar][WARNING] Expected 3 pieces. Missing pieces filled with `NA` in 2 rows ['x', 'x y'].\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         a        b        c\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0        x      NaN      NaN\\n\",\n       \"1        x        y      NaN\\n\",\n       \"2        x        y        z\\n\",\n       \"3      NaN      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> separate(f.x, c(\\\"a\\\", \\\"b\\\", \\\"c\\\"))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"38bddf96\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.254775Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.254144Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.285273Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.285782Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>key</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>error: 7</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       key     value\\n\",\n       \"  <object>  <object>\\n\",\n       \"0        x       123\\n\",\n       \"1        y  error: 7\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(\\\"x: 123\\\", \\\"y: error: 7\\\"))\\n\",\n    \"df >> separate(f.x, c(\\\"key\\\", \\\"value\\\"), \\\": \\\", extra=\\\"merge\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"b147f21e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.312361Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.311692Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.351764Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.352356Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>A</th>\\n\",\n       \"      <th>B</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>y</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>z</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         A        B\\n\",\n       \"  <object> <object>\\n\",\n       \"0      NaN      NaN\\n\",\n       \"1        x        y\\n\",\n       \"2        x        z\\n\",\n       \"3        y        z\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(NA, \\\"x?y\\\", \\\"x.z\\\", \\\"y:z\\\"))\\n\",\n    \"df >> separate(f.x, c(\\\"A\\\",\\\"B\\\"), sep=r\\\"[.?:]\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"d029d623\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.385969Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.384572Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.435868Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.436346Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:25:35][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>key</th>\\n\",\n       \"      <th>value</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>x</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>y</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>z</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       key    value\\n\",\n       \"  <object> <object>\\n\",\n       \"0        x        1\\n\",\n       \"1        x        2\\n\",\n       \"2        y        4\\n\",\n       \"3        z      NaN\\n\",\n       \"4      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x=c(\\\"x:1\\\", \\\"x:2\\\", \\\"y:4\\\", \\\"z\\\", NA))\\n\",\n    \"df >> separate(f.x, c(\\\"key\\\",\\\"value\\\"), \\\":\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"f1a9ec03\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.446982Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.446323Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.472635Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.473105Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:25:36][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 1 rows ['z'].\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"key       object\\n\",\n       \"value    float64\\n\",\n       \"dtype: object\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"out = df >> separate(f.x, c(\\\"key\\\",\\\"value\\\"), \\\":\\\", convert={'value': float}) \\n\",\n    \"out.dtypes\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"c7af94b8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.496700Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.496152Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.518813Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.519189Z\"\n    }\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  x=[1,2,3],\\n\",\n    \"  y=c(\\\"a\\\", \\\"d,e,f\\\", \\\"g,h\\\"),\\n\",\n    \"  z=c(\\\"1\\\", \\\"2,3,4\\\", \\\"5,6\\\")\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"47243faf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:20.556179Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:20.555559Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:20.567301Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:20.567719Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>d</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>e</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>f</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>g</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>h</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x        y       z\\n\",\n       \"  <int64> <object> <int64>\\n\",\n       \"0       1        a       1\\n\",\n       \"1       2        d       2\\n\",\n       \"2       2        e       3\\n\",\n       \"3       2        f       4\\n\",\n       \"4       3        g       5\\n\",\n       \"5       3        h       6\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> separate_rows(f.y, f.z, convert={'z': int})\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"f63ac06e\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/setops.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"f197471c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:41.766049Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:41.765225Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.847260Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.847679Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fsetops.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ intersect</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the intersection of two vectors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: the first vector  \\n\",\n       \"&emsp;&emsp;`y`: the second vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The intersection of the two vectors  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ union</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the union of two vectors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: the first vector  \\n\",\n       \"&emsp;&emsp;`y`: the second vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The union of the two vectors  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ setdiff</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Get the difference of two vectors\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: the first vector  \\n\",\n       \"&emsp;&emsp;`y`: the second vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The difference of the two vectors  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ union_all</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Combine two data frames together.\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/setops.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: A data frame  \\n\",\n       \"&emsp;&emsp;`y`: A data frame  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with rows from x and y  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ setequal</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Check if two vectors are equal\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`x`: the first vector  \\n\",\n       \"&emsp;&emsp;`y`: the second vector  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;Whether the two vectors are equal  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/setops.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(intersect, union, setdiff, union_all, setequal, book='setops')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"dca8c05c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.871867Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.871186Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.955932Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.956665Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"1       17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"2       16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"3       17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"4       15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"5       10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"6       10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"7       14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"8       32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"9       30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"10      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        0       4       4  \\n\",\n       \"1        0       4       4  \\n\",\n       \"2        0       3       3  \\n\",\n       \"3        0       3       3  \\n\",\n       \"4        0       3       3  \\n\",\n       \"5        0       3       4  \\n\",\n       \"6        0       3       4  \\n\",\n       \"7        0       3       4  \\n\",\n       \"8        1       4       1  \\n\",\n       \"9        1       4       2  \\n\",\n       \"10       1       4       1  \"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"first = mtcars >> slice(c[:20])\\n\",\n    \"second = mtcars >> slice(c[9:33])\\n\",\n    \"\\n\",\n    \"intersect(first, second) # or first >> intersect(second)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"20d8b3b9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.011717Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.965221Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.034491Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.035343Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"1       21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"2       22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"3       21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"4       18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"5       18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"6       14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"7       24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"8       22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"9       19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"10      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"11      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"12      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"13      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"14      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"15      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"16      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"17      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"18      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"19      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"20      21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"21      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"22      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"23      13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"24      19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"25      27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"26      26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"27      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"28      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"29      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"30      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"31      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        1       4       4  \\n\",\n       \"1        1       4       4  \\n\",\n       \"2        1       4       1  \\n\",\n       \"3        0       3       1  \\n\",\n       \"4        0       3       2  \\n\",\n       \"5        0       3       1  \\n\",\n       \"6        0       3       4  \\n\",\n       \"7        0       4       2  \\n\",\n       \"8        0       4       2  \\n\",\n       \"9        0       4       4  \\n\",\n       \"10       0       4       4  \\n\",\n       \"11       0       3       3  \\n\",\n       \"12       0       3       3  \\n\",\n       \"13       0       3       3  \\n\",\n       \"14       0       3       4  \\n\",\n       \"15       0       3       4  \\n\",\n       \"16       0       3       4  \\n\",\n       \"17       1       4       1  \\n\",\n       \"18       1       4       2  \\n\",\n       \"19       1       4       1  \\n\",\n       \"20       0       3       1  \\n\",\n       \"21       0       3       2  \\n\",\n       \"22       0       3       2  \\n\",\n       \"23       0       3       4  \\n\",\n       \"24       0       3       2  \\n\",\n       \"25       1       4       1  \\n\",\n       \"26       1       5       2  \\n\",\n       \"27       1       5       2  \\n\",\n       \"28       1       5       4  \\n\",\n       \"29       1       5       6  \\n\",\n       \"30       1       5       8  \\n\",\n       \"31       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"union(first, second)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"04ec7aa8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.167209Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.166202Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.220783Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.221350Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"  <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0      21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"1      21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"2      22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"3      21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"4      18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"5      18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"6      14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"7      24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"8      22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"\\n\",\n       \"       am    gear    carb  \\n\",\n       \"  <int64> <int64> <int64>  \\n\",\n       \"0       1       4       4  \\n\",\n       \"1       1       4       4  \\n\",\n       \"2       1       4       1  \\n\",\n       \"3       0       3       1  \\n\",\n       \"4       0       3       2  \\n\",\n       \"5       0       3       1  \\n\",\n       \"6       0       3       4  \\n\",\n       \"7       0       4       2  \\n\",\n       \"8       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"setdiff(first, second)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"e8e9a2a5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.319268Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.318453Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.343000Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.345072Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"1       15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"2       15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"3       13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"4       19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"5       27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"6       26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"7       30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"8       15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"9       19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"10      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"11      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        0       3       1  \\n\",\n       \"1        0       3       2  \\n\",\n       \"2        0       3       2  \\n\",\n       \"3        0       3       4  \\n\",\n       \"4        0       3       2  \\n\",\n       \"5        1       4       1  \\n\",\n       \"6        1       5       2  \\n\",\n       \"7        1       5       2  \\n\",\n       \"8        1       5       4  \\n\",\n       \"9        1       5       6  \\n\",\n       \"10       1       5       8  \\n\",\n       \"11       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"setdiff(second, first)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"eab63ddf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.434740Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.433913Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.450917Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.451363Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>19</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>20</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>21</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>22</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>23</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>24</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>25</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>26</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>27</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>28</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>29</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>30</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>31</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>32</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>33</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>34</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>35</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>36</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>37</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>38</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>39</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>40</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>41</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>42</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mpg     cyl      disp      hp      drat        wt      qsec      vs  \\\\\\n\",\n       \"   <float64> <int64> <float64> <int64> <float64> <float64> <float64> <int64>   \\n\",\n       \"0       21.0       6     160.0     110      3.90     2.620     16.46       0   \\n\",\n       \"1       21.0       6     160.0     110      3.90     2.875     17.02       0   \\n\",\n       \"2       22.8       4     108.0      93      3.85     2.320     18.61       1   \\n\",\n       \"3       21.4       6     258.0     110      3.08     3.215     19.44       1   \\n\",\n       \"4       18.7       8     360.0     175      3.15     3.440     17.02       0   \\n\",\n       \"5       18.1       6     225.0     105      2.76     3.460     20.22       1   \\n\",\n       \"6       14.3       8     360.0     245      3.21     3.570     15.84       0   \\n\",\n       \"7       24.4       4     146.7      62      3.69     3.190     20.00       1   \\n\",\n       \"8       22.8       4     140.8      95      3.92     3.150     22.90       1   \\n\",\n       \"9       19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"10      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"11      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"12      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"13      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"14      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"15      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"16      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"17      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"18      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"19      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"20      19.2       6     167.6     123      3.92     3.440     18.30       1   \\n\",\n       \"21      17.8       6     167.6     123      3.92     3.440     18.90       1   \\n\",\n       \"22      16.4       8     275.8     180      3.07     4.070     17.40       0   \\n\",\n       \"23      17.3       8     275.8     180      3.07     3.730     17.60       0   \\n\",\n       \"24      15.2       8     275.8     180      3.07     3.780     18.00       0   \\n\",\n       \"25      10.4       8     472.0     205      2.93     5.250     17.98       0   \\n\",\n       \"26      10.4       8     460.0     215      3.00     5.424     17.82       0   \\n\",\n       \"27      14.7       8     440.0     230      3.23     5.345     17.42       0   \\n\",\n       \"28      32.4       4      78.7      66      4.08     2.200     19.47       1   \\n\",\n       \"29      30.4       4      75.7      52      4.93     1.615     18.52       1   \\n\",\n       \"30      33.9       4      71.1      65      4.22     1.835     19.90       1   \\n\",\n       \"31      21.5       4     120.1      97      3.70     2.465     20.01       1   \\n\",\n       \"32      15.5       8     318.0     150      2.76     3.520     16.87       0   \\n\",\n       \"33      15.2       8     304.0     150      3.15     3.435     17.30       0   \\n\",\n       \"34      13.3       8     350.0     245      3.73     3.840     15.41       0   \\n\",\n       \"35      19.2       8     400.0     175      3.08     3.845     17.05       0   \\n\",\n       \"36      27.3       4      79.0      66      4.08     1.935     18.90       1   \\n\",\n       \"37      26.0       4     120.3      91      4.43     2.140     16.70       0   \\n\",\n       \"38      30.4       4      95.1     113      3.77     1.513     16.90       1   \\n\",\n       \"39      15.8       8     351.0     264      4.22     3.170     14.50       0   \\n\",\n       \"40      19.7       6     145.0     175      3.62     2.770     15.50       0   \\n\",\n       \"41      15.0       8     301.0     335      3.54     3.570     14.60       0   \\n\",\n       \"42      21.4       4     121.0     109      4.11     2.780     18.60       1   \\n\",\n       \"\\n\",\n       \"        am    gear    carb  \\n\",\n       \"   <int64> <int64> <int64>  \\n\",\n       \"0        1       4       4  \\n\",\n       \"1        1       4       4  \\n\",\n       \"2        1       4       1  \\n\",\n       \"3        0       3       1  \\n\",\n       \"4        0       3       2  \\n\",\n       \"5        0       3       1  \\n\",\n       \"6        0       3       4  \\n\",\n       \"7        0       4       2  \\n\",\n       \"8        0       4       2  \\n\",\n       \"9        0       4       4  \\n\",\n       \"10       0       4       4  \\n\",\n       \"11       0       3       3  \\n\",\n       \"12       0       3       3  \\n\",\n       \"13       0       3       3  \\n\",\n       \"14       0       3       4  \\n\",\n       \"15       0       3       4  \\n\",\n       \"16       0       3       4  \\n\",\n       \"17       1       4       1  \\n\",\n       \"18       1       4       2  \\n\",\n       \"19       1       4       1  \\n\",\n       \"20       0       4       4  \\n\",\n       \"21       0       4       4  \\n\",\n       \"22       0       3       3  \\n\",\n       \"23       0       3       3  \\n\",\n       \"24       0       3       3  \\n\",\n       \"25       0       3       4  \\n\",\n       \"26       0       3       4  \\n\",\n       \"27       0       3       4  \\n\",\n       \"28       1       4       1  \\n\",\n       \"29       1       4       2  \\n\",\n       \"30       1       4       1  \\n\",\n       \"31       0       3       1  \\n\",\n       \"32       0       3       2  \\n\",\n       \"33       0       3       2  \\n\",\n       \"34       0       3       4  \\n\",\n       \"35       0       3       2  \\n\",\n       \"36       1       4       1  \\n\",\n       \"37       1       5       2  \\n\",\n       \"38       1       5       2  \\n\",\n       \"39       1       5       4  \\n\",\n       \"40       1       5       6  \\n\",\n       \"41       1       5       8  \\n\",\n       \"42       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"union_all(first, second)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"8bd44bc8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.464440Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.461787Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.474479Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.472717Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"False\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"setequal(mtcars, mtcars >> slice(c[::-1]))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"e11d56ab\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.481956Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.480828Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.654906Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.655357Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>column</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   column\\n\",\n       \"  <int64>\\n\",\n       \"0       0\\n\",\n       \"1       1\\n\",\n       \"2       2\\n\",\n       \"3       3\\n\",\n       \"4       4\\n\",\n       \"5       5\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"a = tibble(column=c(*range(11), 10))\\n\",\n    \"b = tibble(column=c(*range(6), 5))\\n\",\n    \"intersect(a, b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"7328ac81\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.671067Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.670499Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.681412Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.680573Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>column</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    column\\n\",\n       \"   <int64>\\n\",\n       \"0        0\\n\",\n       \"1        1\\n\",\n       \"2        2\\n\",\n       \"3        3\\n\",\n       \"4        4\\n\",\n       \"5        5\\n\",\n       \"6        6\\n\",\n       \"7        7\\n\",\n       \"8        8\\n\",\n       \"9        9\\n\",\n       \"10      10\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"union(a, b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"d6f95d6e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.703712Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.702882Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.713924Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.714338Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>column</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   column\\n\",\n       \"  <int64>\\n\",\n       \"0       6\\n\",\n       \"1       7\\n\",\n       \"2       8\\n\",\n       \"3       9\\n\",\n       \"4      10\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"setdiff(a, b)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"9834a5a5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:43.728734Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:43.728183Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:43.737284Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:43.737663Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>column</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>10</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>13</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>14</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>15</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>16</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>17</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>18</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"    column\\n\",\n       \"   <int64>\\n\",\n       \"0        0\\n\",\n       \"1        1\\n\",\n       \"2        2\\n\",\n       \"3        3\\n\",\n       \"4        4\\n\",\n       \"5        5\\n\",\n       \"6        6\\n\",\n       \"7        7\\n\",\n       \"8        8\\n\",\n       \"9        9\\n\",\n       \"10      10\\n\",\n       \"11      10\\n\",\n       \"12       0\\n\",\n       \"13       1\\n\",\n       \"14       2\\n\",\n       \"15       3\\n\",\n       \"16       4\\n\",\n       \"17       5\\n\",\n       \"18       5\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"union_all(a, b)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/slice.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"687000ba\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:51.388660Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:51.387866Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:52.848711Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:52.849303Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fslice_.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract rows by their position\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`*args`: Positions to extract.  \\n\",\n       \"&emsp;&emsp;`_preserve`: If `True`, keep grouping variables even if they are not used.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_head</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract the first rows\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`n`: Number of rows to extract.  \\n\",\n       \"&emsp;&emsp;`prop`: Proportion of rows to extract.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_max</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract rows with the maximum value\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`order_by`: A variable or function of variables to order by.  \\n\",\n       \"&emsp;&emsp;`n`: Number of rows to extract.  \\n\",\n       \"&emsp;&emsp;`prop`: Proportion of rows to extract.  \\n\",\n       \"&emsp;&emsp;`with_ties`: If `True`, extract all rows with the maximum value.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If \\\"first\\\", extract the first row with the maximum value.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If \\\"last\\\", extract the last row with the maximum value.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_min</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract rows with the minimum value\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`order_by`: A variable or function of variables to order by.  \\n\",\n       \"&emsp;&emsp;`n`: Number of rows to extract.  \\n\",\n       \"&emsp;&emsp;`prop`: Proportion of rows to extract.  \\n\",\n       \"&emsp;&emsp;`with_ties`: If `True`, extract all rows with the minimum value.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If \\\"first\\\", extract the first row with the minimum value.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;If \\\"last\\\", extract the last row with the minimum value.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_sample</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract rows by sampling\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`n`: Number of rows to extract.  \\n\",\n       \"&emsp;&emsp;`prop`: Proportion of rows to extract.  \\n\",\n       \"&emsp;&emsp;`weight_by`: A variable or function of variables to weight by.  \\n\",\n       \"&emsp;&emsp;`replace`: If `True`, sample with replacement.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ slice_tail</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Extract the last rows\\n\",\n       \"\\n\",\n       \"The original API:  \\n\",\n       \"https://dplyr.tidyverse.org/reference/slice.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`n`: Number of rows to extract.  \\n\",\n       \"&emsp;&emsp;`prop`: Proportion of rows to extract.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The subset dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/slice.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(slice, slice_head, slice_max, slice_min, slice_sample, slice_tail)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"6f4525fc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:52.855019Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:52.854440Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:52.894377Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:52.892941Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>2.62</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"          <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Mazda RX4      21.0       6     160.0     110       3.9      2.62     16.46   \\n\",\n       \"\\n\",\n       \"               vs      am    gear    carb  \\n\",\n       \"          <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4       0       1       4       4  \"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice(0) # 0-based by default\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"93030877\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:52.918646Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:52.917763Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:52.923511Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:52.924091Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.78</td>\\n\",\n       \"      <td>18.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"           <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Volvo 142E      21.4       4     121.0     109      4.11      2.78      18.6   \\n\",\n       \"\\n\",\n       \"                vs      am    gear    carb  \\n\",\n       \"           <int64> <int64> <int64> <int64>  \\n\",\n       \"Volvo 142E       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice(n()-1) # last row\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"3e1c0360\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:52.943903Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:52.943084Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:52.966057Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:52.967443Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.78</td>\\n\",\n       \"      <td>18.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"           <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Volvo 142E      21.4       4     121.0     109      4.11      2.78      18.6   \\n\",\n       \"\\n\",\n       \"                vs      am    gear    carb  \\n\",\n       \"           <int64> <int64> <int64> <int64>  \\n\",\n       \"Volvo 142E       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# or\\n\",\n    \"mtcars >> slice(-1) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"2bed6c2b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.009902Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.008520Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.019440Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.018355Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice(c[5:])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"c07b2866\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.057816Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.057023Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.061578Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.061006Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# or\\n\",\n    \"mtcars >> slice(~c[:4])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"49170752\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.080629Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.079627Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.086627Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.087171Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.17</td>\\n\",\n       \"      <td>14.5</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.78</td>\\n\",\n       \"      <td>18.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.57</td>\\n\",\n       \"      <td>14.6</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.77</td>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"               <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Ford Pantera L      15.8       8     351.0     264      4.22      3.17   \\n\",\n       \"Volvo 142E          21.4       4     121.0     109      4.11      2.78   \\n\",\n       \"Maserati Bora       15.0       8     301.0     335      3.54      3.57   \\n\",\n       \"Ferrari Dino        19.7       6     145.0     175      3.62      2.77   \\n\",\n       \"\\n\",\n       \"                    qsec      vs      am    gear    carb  \\n\",\n       \"               <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Ford Pantera L      14.5       0       1       5       4  \\n\",\n       \"Volvo 142E          18.6       1       1       4       2  \\n\",\n       \"Maserati Bora       14.6       0       1       5       8  \\n\",\n       \"Ferrari Dino        15.5       0       1       5       6  \"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice(-c[:4]) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"cd55594c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.110800Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.110245Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.117621Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.116993Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                  <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Mazda RX4              21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag          21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Datsun 710             22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Hornet 4 Drive         21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Hornet Sportabout      18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"\\n\",\n       \"                       qsec      vs      am    gear    carb  \\n\",\n       \"                  <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4             16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag         17.02       0       1       4       4  \\n\",\n       \"Datsun 710            18.61       1       1       4       1  \\n\",\n       \"Hornet 4 Drive        19.44       1       0       3       1  \\n\",\n       \"Hornet Sportabout     17.02       0       0       3       2  \"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_head(n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"1cef8a7e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.141804Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.141219Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.145330Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.145692Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.5</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.6</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"               <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Lotus Europa        30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L      15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino        19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora       15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Volvo 142E          21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                    qsec      vs      am    gear    carb  \\n\",\n       \"               <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Lotus Europa        16.9       1       1       5       2  \\n\",\n       \"Ford Pantera L      14.5       0       1       5       4  \\n\",\n       \"Ferrari Dino        15.5       0       1       5       6  \\n\",\n       \"Maserati Bora       14.6       0       1       5       8  \\n\",\n       \"Volvo 142E          18.6       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_tail(n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"4412e0a9\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.155355Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.154742Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.171005Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.171382Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_min(f.mpg, n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"ebf401e8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.191479Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.190665Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.195085Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.195476Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"               <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Toyota Corolla      33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Fiat 128            32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic         30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Lotus Europa        30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Fiat X1-9           27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"\\n\",\n       \"                    qsec      vs      am    gear    carb  \\n\",\n       \"               <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Toyota Corolla     19.90       1       1       4       1  \\n\",\n       \"Fiat 128           19.47       1       1       4       1  \\n\",\n       \"Honda Civic        18.52       1       1       4       2  \\n\",\n       \"Lotus Europa       16.90       1       1       5       2  \\n\",\n       \"Fiat X1-9          18.90       1       1       4       1  \"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_max(f.mpg, n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"b3497c2f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.221883Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.221344Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.225645Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.225082Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"               <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Datsun 710          22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Merc 240D           24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230            22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Fiat 128            32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic         30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla      33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona       21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Fiat X1-9           27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2       26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa        30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Volvo 142E          21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                    qsec      vs      am    gear    carb  \\n\",\n       \"               <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Datsun 710         18.61       1       1       4       1  \\n\",\n       \"Merc 240D          20.00       1       0       4       2  \\n\",\n       \"Merc 230           22.90       1       0       4       2  \\n\",\n       \"Fiat 128           19.47       1       1       4       1  \\n\",\n       \"Honda Civic        18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla     19.90       1       1       4       1  \\n\",\n       \"Toyota Corona      20.01       1       0       3       1  \\n\",\n       \"Fiat X1-9          18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2      16.70       0       1       5       2  \\n\",\n       \"Lotus Europa       16.90       1       1       5       2  \\n\",\n       \"Volvo 142E         18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_min(f.cyl, n=1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"7615035a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.243252Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.242636Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.247446Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.248035Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.32</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"           <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Datsun 710      22.8       4     108.0      93      3.85      2.32     18.61   \\n\",\n       \"\\n\",\n       \"                vs      am    gear    carb  \\n\",\n       \"           <int64> <int64> <int64> <int64>  \\n\",\n       \"Datsun 710       1       1       4       1  \"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_min(f.cyl, n=1, with_ties=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"412dbdf8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.255281Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.254666Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.269028Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.269431Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                     mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"               <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Datsun 710          22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Merc 240D           24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230            22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Fiat 128            32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic         30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla      33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona       21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Fiat X1-9           27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2       26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa        30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Volvo 142E          21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                    qsec      vs      am    gear    carb  \\n\",\n       \"               <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Datsun 710         18.61       1       1       4       1  \\n\",\n       \"Merc 240D          20.00       1       0       4       2  \\n\",\n       \"Merc 230           22.90       1       0       4       2  \\n\",\n       \"Fiat 128           19.47       1       1       4       1  \\n\",\n       \"Honda Civic        18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla     19.90       1       1       4       1  \\n\",\n       \"Toyota Corona      20.01       1       0       3       1  \\n\",\n       \"Fiat X1-9          18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2      16.70       0       1       5       2  \\n\",\n       \"Lotus Europa       16.90       1       1       5       2  \\n\",\n       \"Volvo 142E         18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 15,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_min(f.cyl, n=1, with_ties='last')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"f31f199b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.286560Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.285952Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.290159Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.290729Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                  <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Merc 240D              24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Fiat X1-9              27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Datsun 710             22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Chrysler Imperial      14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Merc 230               22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"\\n\",\n       \"                       qsec      vs      am    gear    carb  \\n\",\n       \"                  <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Merc 240D             20.00       1       0       4       2  \\n\",\n       \"Fiat X1-9             18.90       1       1       4       1  \\n\",\n       \"Datsun 710            18.61       1       1       4       1  \\n\",\n       \"Chrysler Imperial     17.42       0       0       3       4  \\n\",\n       \"Merc 230              22.90       1       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_sample(n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"id\": \"04e1ef2a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.308662Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.295781Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.312132Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.312505Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.6</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.7</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"              <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Lotus Europa       30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Merc 450SL         17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Porsche 914-2      26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Merc 230           22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 240D          24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"\\n\",\n       \"                   qsec      vs      am    gear    carb  \\n\",\n       \"              <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Lotus Europa       16.9       1       1       5       2  \\n\",\n       \"Merc 450SL         17.6       0       0       3       3  \\n\",\n       \"Porsche 914-2      16.7       0       1       5       2  \\n\",\n       \"Merc 230           22.9       1       0       4       2  \\n\",\n       \"Merc 240D          20.0       1       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_sample(n=5, random_state=8525)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"id\": \"46787805\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.329053Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.319160Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.335440Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.334746Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.6</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.7</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.9</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                    mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"              <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Lotus Europa       30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Merc 450SL         17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Porsche 914-2      26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Merc 230           22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 240D          24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"\\n\",\n       \"                   qsec      vs      am    gear    carb  \\n\",\n       \"              <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Lotus Europa       16.9       1       1       5       2  \\n\",\n       \"Merc 450SL         17.6       0       0       3       3  \\n\",\n       \"Porsche 914-2      16.7       0       1       5       2  \\n\",\n       \"Merc 230           22.9       1       0       4       2  \\n\",\n       \"Merc 240D          20.0       1       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_sample(n=5, random_state=8525)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"id\": \"05b6295f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.352998Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.352231Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.356989Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.356410Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                        mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                  <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Dodge Challenger       15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"Merc 280C              17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Dodge Challenger       15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"Chrysler Imperial      14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Duster 360             14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"\\n\",\n       \"                       qsec      vs      am    gear    carb  \\n\",\n       \"                  <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Dodge Challenger      16.87       0       0       3       2  \\n\",\n       \"Merc 280C             18.90       1       0       4       4  \\n\",\n       \"Dodge Challenger      16.87       0       0       3       2  \\n\",\n       \"Chrysler Imperial     17.42       0       0       3       4  \\n\",\n       \"Duster 360            15.84       0       0       3       4  \"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_sample(n=5, random_state=8525, replace=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"id\": \"15e0a2ec\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.366103Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.363135Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.379310Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.379718Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                         mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                   <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Volvo 142E              21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"Cadillac Fleetwood      10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Merc 240D               24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Fiat X1-9               27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Merc 230                22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"\\n\",\n       \"                        qsec      vs      am    gear    carb  \\n\",\n       \"                   <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Volvo 142E             18.60       1       1       4       2  \\n\",\n       \"Cadillac Fleetwood     17.98       0       0       3       4  \\n\",\n       \"Merc 240D              20.00       1       0       4       2  \\n\",\n       \"Fiat X1-9              18.90       1       1       4       1  \\n\",\n       \"Merc 230               22.90       1       0       4       2  \"\n      ]\n     },\n     \"execution_count\": 20,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> slice_sample(weight_by=f.wt, n=5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"id\": \"4c70672b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.388656Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.388004Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.667152Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.667667Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.993287</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.969380</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.450665</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.710398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.029497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=3)\"\n      ],\n      \"text/plain\": [\n       \"     group         x\\n\",\n       \"  <object> <float64>\\n\",\n       \"0        a  0.993287\\n\",\n       \"1        b  0.969380\\n\",\n       \"2        b  0.450665\\n\",\n       \"3        c  0.710398\\n\",\n       \"4        c  0.029497\\n\",\n       \"[TibbleGrouped: group (n=3)]\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  group=['a'] + ['b']*2 + ['c']*4,\\n\",\n    \"  x=runif(7)\\n\",\n    \")\\n\",\n    \"df >> group_by(f.group) >> slice_head(n=2) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"id\": \"28c330c1\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.680330Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.679658Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.705573Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.706286Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.969380</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.710398</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.029497</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=2)\"\n      ],\n      \"text/plain\": [\n       \"     group         x\\n\",\n       \"  <object> <float64>\\n\",\n       \"0        b  0.969380\\n\",\n       \"1        c  0.710398\\n\",\n       \"2        c  0.029497\\n\",\n       \"[TibbleGrouped: group (n=2)]\"\n      ]\n     },\n     \"execution_count\": 22,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> group_by(f.group) >> slice_head(prop = 0.5)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 23,\n   \"id\": \"3914da22\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.745218Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.744300Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.752877Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.753355Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.9</td>\\n\",\n       \"      <td>2.62</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"          <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Mazda RX4      21.0       6     160.0     110       3.9      2.62     16.46   \\n\",\n       \"\\n\",\n       \"               vs      am    gear    carb  \\n\",\n       \"          <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4       0       1       4       4  \"\n      ]\n     },\n     \"execution_count\": 23,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# row_number() is 1-based by default\\n\",\n    \"mtcars >> filter(row_number() == 1) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 24,\n   \"id\": \"0e7fd99c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.774853Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.774008Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.779099Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.779512Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.78</td>\\n\",\n       \"      <td>18.6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                 mpg     cyl      disp      hp      drat        wt      qsec  \\\\\\n\",\n       \"           <float64> <int64> <float64> <int64> <float64> <float64> <float64>   \\n\",\n       \"Volvo 142E      21.4       4     121.0     109      4.11      2.78      18.6   \\n\",\n       \"\\n\",\n       \"                vs      am    gear    carb  \\n\",\n       \"           <int64> <int64> <int64> <int64>  \\n\",\n       \"Volvo 142E       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 24,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> filter(row_number() == n() )\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 25,\n   \"id\": \"58792c4c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.821139Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.820390Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:53.825821Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:53.826297Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.620</td>\\n\",\n       \"      <td>16.46</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Mazda RX4 Wag</th>\\n\",\n       \"      <td>21.0</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>160.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.90</td>\\n\",\n       \"      <td>2.875</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Datsun 710</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>108.0</td>\\n\",\n       \"      <td>93</td>\\n\",\n       \"      <td>3.85</td>\\n\",\n       \"      <td>2.320</td>\\n\",\n       \"      <td>18.61</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet 4 Drive</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>258.0</td>\\n\",\n       \"      <td>110</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.215</td>\\n\",\n       \"      <td>19.44</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Mazda RX4                21.0       6     160.0     110      3.90     2.620   \\n\",\n       \"Mazda RX4 Wag            21.0       6     160.0     110      3.90     2.875   \\n\",\n       \"Datsun 710               22.8       4     108.0      93      3.85     2.320   \\n\",\n       \"Hornet 4 Drive           21.4       6     258.0     110      3.08     3.215   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Mazda RX4               16.46       0       1       4       4  \\n\",\n       \"Mazda RX4 Wag           17.02       0       1       4       4  \\n\",\n       \"Datsun 710              18.61       1       1       4       1  \\n\",\n       \"Hornet 4 Drive          19.44       1       0       3       1  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \"\n      ]\n     },\n     \"execution_count\": 25,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> filter(5 <= row_number() < n()) # cannot filter\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 26,\n   \"id\": \"7dc416a2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:53.841148Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:53.840428Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:54.095942Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:54.098637Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mpg</th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>hp</th>\\n\",\n       \"      <th>drat</th>\\n\",\n       \"      <th>wt</th>\\n\",\n       \"      <th>qsec</th>\\n\",\n       \"      <th>vs</th>\\n\",\n       \"      <th>am</th>\\n\",\n       \"      <th>gear</th>\\n\",\n       \"      <th>carb</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Hornet Sportabout</th>\\n\",\n       \"      <td>18.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>17.02</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Valiant</th>\\n\",\n       \"      <td>18.1</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>225.0</td>\\n\",\n       \"      <td>105</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.460</td>\\n\",\n       \"      <td>20.22</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Duster 360</th>\\n\",\n       \"      <td>14.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>360.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.21</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>15.84</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 240D</th>\\n\",\n       \"      <td>24.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>146.7</td>\\n\",\n       \"      <td>62</td>\\n\",\n       \"      <td>3.69</td>\\n\",\n       \"      <td>3.190</td>\\n\",\n       \"      <td>20.00</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 230</th>\\n\",\n       \"      <td>22.8</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>140.8</td>\\n\",\n       \"      <td>95</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.150</td>\\n\",\n       \"      <td>22.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.30</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 280C</th>\\n\",\n       \"      <td>17.8</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>167.6</td>\\n\",\n       \"      <td>123</td>\\n\",\n       \"      <td>3.92</td>\\n\",\n       \"      <td>3.440</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SE</th>\\n\",\n       \"      <td>16.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>4.070</td>\\n\",\n       \"      <td>17.40</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SL</th>\\n\",\n       \"      <td>17.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.730</td>\\n\",\n       \"      <td>17.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Merc 450SLC</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>275.8</td>\\n\",\n       \"      <td>180</td>\\n\",\n       \"      <td>3.07</td>\\n\",\n       \"      <td>3.780</td>\\n\",\n       \"      <td>18.00</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Cadillac Fleetwood</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>472.0</td>\\n\",\n       \"      <td>205</td>\\n\",\n       \"      <td>2.93</td>\\n\",\n       \"      <td>5.250</td>\\n\",\n       \"      <td>17.98</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lincoln Continental</th>\\n\",\n       \"      <td>10.4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>460.0</td>\\n\",\n       \"      <td>215</td>\\n\",\n       \"      <td>3.00</td>\\n\",\n       \"      <td>5.424</td>\\n\",\n       \"      <td>17.82</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Chrysler Imperial</th>\\n\",\n       \"      <td>14.7</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>440.0</td>\\n\",\n       \"      <td>230</td>\\n\",\n       \"      <td>3.23</td>\\n\",\n       \"      <td>5.345</td>\\n\",\n       \"      <td>17.42</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat 128</th>\\n\",\n       \"      <td>32.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>78.7</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>2.200</td>\\n\",\n       \"      <td>19.47</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Honda Civic</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>75.7</td>\\n\",\n       \"      <td>52</td>\\n\",\n       \"      <td>4.93</td>\\n\",\n       \"      <td>1.615</td>\\n\",\n       \"      <td>18.52</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corolla</th>\\n\",\n       \"      <td>33.9</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>71.1</td>\\n\",\n       \"      <td>65</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>1.835</td>\\n\",\n       \"      <td>19.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Toyota Corona</th>\\n\",\n       \"      <td>21.5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.1</td>\\n\",\n       \"      <td>97</td>\\n\",\n       \"      <td>3.70</td>\\n\",\n       \"      <td>2.465</td>\\n\",\n       \"      <td>20.01</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Dodge Challenger</th>\\n\",\n       \"      <td>15.5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>318.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>2.76</td>\\n\",\n       \"      <td>3.520</td>\\n\",\n       \"      <td>16.87</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>AMC Javelin</th>\\n\",\n       \"      <td>15.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>304.0</td>\\n\",\n       \"      <td>150</td>\\n\",\n       \"      <td>3.15</td>\\n\",\n       \"      <td>3.435</td>\\n\",\n       \"      <td>17.30</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Camaro Z28</th>\\n\",\n       \"      <td>13.3</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>350.0</td>\\n\",\n       \"      <td>245</td>\\n\",\n       \"      <td>3.73</td>\\n\",\n       \"      <td>3.840</td>\\n\",\n       \"      <td>15.41</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Pontiac Firebird</th>\\n\",\n       \"      <td>19.2</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>400.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.08</td>\\n\",\n       \"      <td>3.845</td>\\n\",\n       \"      <td>17.05</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Fiat X1-9</th>\\n\",\n       \"      <td>27.3</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>79.0</td>\\n\",\n       \"      <td>66</td>\\n\",\n       \"      <td>4.08</td>\\n\",\n       \"      <td>1.935</td>\\n\",\n       \"      <td>18.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Porsche 914-2</th>\\n\",\n       \"      <td>26.0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>120.3</td>\\n\",\n       \"      <td>91</td>\\n\",\n       \"      <td>4.43</td>\\n\",\n       \"      <td>2.140</td>\\n\",\n       \"      <td>16.70</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Lotus Europa</th>\\n\",\n       \"      <td>30.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>95.1</td>\\n\",\n       \"      <td>113</td>\\n\",\n       \"      <td>3.77</td>\\n\",\n       \"      <td>1.513</td>\\n\",\n       \"      <td>16.90</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ford Pantera L</th>\\n\",\n       \"      <td>15.8</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>351.0</td>\\n\",\n       \"      <td>264</td>\\n\",\n       \"      <td>4.22</td>\\n\",\n       \"      <td>3.170</td>\\n\",\n       \"      <td>14.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Ferrari Dino</th>\\n\",\n       \"      <td>19.7</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>145.0</td>\\n\",\n       \"      <td>175</td>\\n\",\n       \"      <td>3.62</td>\\n\",\n       \"      <td>2.770</td>\\n\",\n       \"      <td>15.50</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Maserati Bora</th>\\n\",\n       \"      <td>15.0</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>301.0</td>\\n\",\n       \"      <td>335</td>\\n\",\n       \"      <td>3.54</td>\\n\",\n       \"      <td>3.570</td>\\n\",\n       \"      <td>14.60</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>Volvo 142E</th>\\n\",\n       \"      <td>21.4</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>121.0</td>\\n\",\n       \"      <td>109</td>\\n\",\n       \"      <td>4.11</td>\\n\",\n       \"      <td>2.780</td>\\n\",\n       \"      <td>18.60</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"                          mpg     cyl      disp      hp      drat        wt  \\\\\\n\",\n       \"                    <float64> <int64> <float64> <int64> <float64> <float64>   \\n\",\n       \"Hornet Sportabout        18.7       8     360.0     175      3.15     3.440   \\n\",\n       \"Valiant                  18.1       6     225.0     105      2.76     3.460   \\n\",\n       \"Duster 360               14.3       8     360.0     245      3.21     3.570   \\n\",\n       \"Merc 240D                24.4       4     146.7      62      3.69     3.190   \\n\",\n       \"Merc 230                 22.8       4     140.8      95      3.92     3.150   \\n\",\n       \"Merc 280                 19.2       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 280C                17.8       6     167.6     123      3.92     3.440   \\n\",\n       \"Merc 450SE               16.4       8     275.8     180      3.07     4.070   \\n\",\n       \"Merc 450SL               17.3       8     275.8     180      3.07     3.730   \\n\",\n       \"Merc 450SLC              15.2       8     275.8     180      3.07     3.780   \\n\",\n       \"Cadillac Fleetwood       10.4       8     472.0     205      2.93     5.250   \\n\",\n       \"Lincoln Continental      10.4       8     460.0     215      3.00     5.424   \\n\",\n       \"Chrysler Imperial        14.7       8     440.0     230      3.23     5.345   \\n\",\n       \"Fiat 128                 32.4       4      78.7      66      4.08     2.200   \\n\",\n       \"Honda Civic              30.4       4      75.7      52      4.93     1.615   \\n\",\n       \"Toyota Corolla           33.9       4      71.1      65      4.22     1.835   \\n\",\n       \"Toyota Corona            21.5       4     120.1      97      3.70     2.465   \\n\",\n       \"Dodge Challenger         15.5       8     318.0     150      2.76     3.520   \\n\",\n       \"AMC Javelin              15.2       8     304.0     150      3.15     3.435   \\n\",\n       \"Camaro Z28               13.3       8     350.0     245      3.73     3.840   \\n\",\n       \"Pontiac Firebird         19.2       8     400.0     175      3.08     3.845   \\n\",\n       \"Fiat X1-9                27.3       4      79.0      66      4.08     1.935   \\n\",\n       \"Porsche 914-2            26.0       4     120.3      91      4.43     2.140   \\n\",\n       \"Lotus Europa             30.4       4      95.1     113      3.77     1.513   \\n\",\n       \"Ford Pantera L           15.8       8     351.0     264      4.22     3.170   \\n\",\n       \"Ferrari Dino             19.7       6     145.0     175      3.62     2.770   \\n\",\n       \"Maserati Bora            15.0       8     301.0     335      3.54     3.570   \\n\",\n       \"Volvo 142E               21.4       4     121.0     109      4.11     2.780   \\n\",\n       \"\\n\",\n       \"                         qsec      vs      am    gear    carb  \\n\",\n       \"                    <float64> <int64> <int64> <int64> <int64>  \\n\",\n       \"Hornet Sportabout       17.02       0       0       3       2  \\n\",\n       \"Valiant                 20.22       1       0       3       1  \\n\",\n       \"Duster 360              15.84       0       0       3       4  \\n\",\n       \"Merc 240D               20.00       1       0       4       2  \\n\",\n       \"Merc 230                22.90       1       0       4       2  \\n\",\n       \"Merc 280                18.30       1       0       4       4  \\n\",\n       \"Merc 280C               18.90       1       0       4       4  \\n\",\n       \"Merc 450SE              17.40       0       0       3       3  \\n\",\n       \"Merc 450SL              17.60       0       0       3       3  \\n\",\n       \"Merc 450SLC             18.00       0       0       3       3  \\n\",\n       \"Cadillac Fleetwood      17.98       0       0       3       4  \\n\",\n       \"Lincoln Continental     17.82       0       0       3       4  \\n\",\n       \"Chrysler Imperial       17.42       0       0       3       4  \\n\",\n       \"Fiat 128                19.47       1       1       4       1  \\n\",\n       \"Honda Civic             18.52       1       1       4       2  \\n\",\n       \"Toyota Corolla          19.90       1       1       4       1  \\n\",\n       \"Toyota Corona           20.01       1       0       3       1  \\n\",\n       \"Dodge Challenger        16.87       0       0       3       2  \\n\",\n       \"AMC Javelin             17.30       0       0       3       2  \\n\",\n       \"Camaro Z28              15.41       0       0       3       4  \\n\",\n       \"Pontiac Firebird        17.05       0       0       3       2  \\n\",\n       \"Fiat X1-9               18.90       1       1       4       1  \\n\",\n       \"Porsche 914-2           16.70       0       1       5       2  \\n\",\n       \"Lotus Europa            16.90       1       1       5       2  \\n\",\n       \"Ford Pantera L          14.50       0       1       5       4  \\n\",\n       \"Ferrari Dino            15.50       0       1       5       6  \\n\",\n       \"Maserati Bora           14.60       0       1       5       8  \\n\",\n       \"Volvo 142E              18.60       1       1       4       2  \"\n      ]\n     },\n     \"execution_count\": 26,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> filter(between(row_number(), 5, n()))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 27,\n   \"id\": \"65b00ace\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:54.226219Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:54.225422Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:54.337352Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:54.338233Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.068146</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.418989</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.047916</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.054781</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.000433</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.010472</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=3)\"\n      ],\n      \"text/plain\": [\n       \"     group         x\\n\",\n       \"  <object> <float64>\\n\",\n       \"0        a  0.068146\\n\",\n       \"1        a  0.418989\\n\",\n       \"2        b  0.047916\\n\",\n       \"3        b  0.054781\\n\",\n       \"4        c  0.000433\\n\",\n       \"5        c  0.010472\\n\",\n       \"[TibbleGrouped: group (n=3)]\"\n      ]\n     },\n     \"execution_count\": 27,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(\\n\",\n    \"  group=['a']*10 + ['b']*20 + ['c']*40,\\n\",\n    \"  x=runif(70)\\n\",\n    \")\\n\",\n    \"df >> group_by(f.group) >> slice_min(f.x, 2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 28,\n   \"id\": \"897476cf\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:54.455605Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:54.454822Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:54.479309Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:54.479835Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.985698</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.712850</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.993662</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.985569</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.994279</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.966813</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=3)\"\n      ],\n      \"text/plain\": [\n       \"     group         x\\n\",\n       \"  <object> <float64>\\n\",\n       \"0        a  0.985698\\n\",\n       \"1        a  0.712850\\n\",\n       \"2        b  0.993662\\n\",\n       \"3        b  0.985569\\n\",\n       \"4        c  0.994279\\n\",\n       \"5        c  0.966813\\n\",\n       \"[TibbleGrouped: group (n=3)]\"\n      ]\n     },\n     \"execution_count\": 28,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> group_by(f.group) >> slice_max(f.x, 2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 29,\n   \"id\": \"887f2625\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:54.560420Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:54.558166Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:54.635454Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:54.636608Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>group</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.636650</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>0.068146</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.058098</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>0.847180</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.743841</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>0.010472</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: group (n=3)\"\n      ],\n      \"text/plain\": [\n       \"     group         x\\n\",\n       \"  <object> <float64>\\n\",\n       \"0        a  0.636650\\n\",\n       \"1        a  0.068146\\n\",\n       \"2        b  0.058098\\n\",\n       \"3        b  0.847180\\n\",\n       \"4        c  0.743841\\n\",\n       \"5        c  0.010472\\n\",\n       \"[TibbleGrouped: group (n=3)]\"\n      ]\n     },\n     \"execution_count\": 29,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> group_by(f.group) >> slice_sample(2)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/summarise.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"4ba9dd17\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:30.653194Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:30.652556Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.410785Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.411264Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fsummarise.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ summarise</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Summarise a data frame.\\n\",\n       \"\\n\",\n       \"See original API  \\n\",\n       \"https://dplyr.tidyverse.org/reference/summarise.html  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`_groups`: Grouping structure of the result.  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"drop_last\\\": dropping the last level of grouping.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"drop\\\": All levels of grouping are dropped.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"keep\\\": Same grouping structure as _data.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"rowwise\\\": Each row is its own group.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: Name-value pairs, where value is the summarized  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;data for each group  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A data frame with the summarised columns  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/summarise.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.data import mtcars, starwars\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(summarise)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"193d02c5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.468439Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.465218Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.487717Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.490086Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>mean</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>230.721875</td>\\n\",\n       \"      <td>32</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         mean       n\\n\",\n       \"    <float64> <int64>\\n\",\n       \"0  230.721875      32\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> summarise(mean=mean(f.disp), n=n())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"0f48dddc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.498734Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.497950Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.637631Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.638084Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>mean</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>183.314286</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>105.136364</td>\\n\",\n       \"      <td>11</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>353.100000</td>\\n\",\n       \"      <td>14</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      cyl        mean       n\\n\",\n       \"  <int64>   <float64> <int64>\\n\",\n       \"0       6  183.314286       7\\n\",\n       \"1       4  105.136364      11\\n\",\n       \"2       8  353.100000      14\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl) >> \\\\\\n\",\n    \"  summarise(mean=mean(f.disp), n=n())\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"96d1660d\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.678462Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.677889Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.723973Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.724468Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:46:41][datar][   INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>qs</th>\\n\",\n       \"      <th>prob</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>[160.0, 196.3]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>[160.0, 196.3]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>[78.85, 120.65]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>[78.85, 120.65]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>[301.75, 390.0]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>[301.75, 390.0]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"      cyl               qs      prob\\n\",\n       \"  <int64>         <object> <float64>\\n\",\n       \"0       6   [160.0, 196.3]      0.25\\n\",\n       \"1       6   [160.0, 196.3]      0.75\\n\",\n       \"2       4  [78.85, 120.65]      0.25\\n\",\n       \"3       4  [78.85, 120.65]      0.75\\n\",\n       \"4       8  [301.75, 390.0]      0.25\\n\",\n       \"5       8  [301.75, 390.0]      0.75\\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> \\\\\\n\",\n    \"   group_by(f.cyl) >> \\\\\\n\",\n    \"   summarise(qs=quantile(f.disp, c(0.25, 0.75)), prob=c(0.25, 0.75))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"4e64de5a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:33.770702Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:33.770156Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:33.777651Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:33.778278Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>qs</th>\\n\",\n       \"      <th>prob</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>[160.0, 196.3]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>[160.0, 196.3]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>[78.85, 120.65]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>[78.85, 120.65]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>[301.75, 390.0]</td>\\n\",\n       \"      <td>0.25</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>[301.75, 390.0]</td>\\n\",\n       \"      <td>0.75</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: cyl (n=3)\"\n      ],\n      \"text/plain\": [\n       \"      cyl               qs      prob\\n\",\n       \"  <int64>         <object> <float64>\\n\",\n       \"0       6   [160.0, 196.3]      0.25\\n\",\n       \"1       6   [160.0, 196.3]      0.75\\n\",\n       \"2       4  [78.85, 120.65]      0.25\\n\",\n       \"3       4  [78.85, 120.65]      0.75\\n\",\n       \"4       8  [301.75, 390.0]      0.25\\n\",\n       \"5       8  [301.75, 390.0]      0.75\\n\",\n       \"[TibbleGrouped: cyl (n=3)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"with options_context(dplyr_summarise_inform=False):\\n\",\n    \"    mtcars >> \\\\\\n\",\n    \"        group_by(f.cyl) >> \\\\\\n\",\n    \"        summarise(qs=quantile(f.disp, c(0.25, 0.75)), prob=c(0.25, 0.75))\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"e5098761\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.152815Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.150055Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.225066Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.225477Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:46:52][datar][   INFO] `summarise()` has grouped output by ['cyl'] (override with `_groups` argument)\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"['cyl']\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl, f.vs) >> \\\\\\n\",\n    \"  summarise(cyl_n = n()) >> \\\\\\n\",\n    \"  group_vars()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"01a62149\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.254608Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.253050Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.259957Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.260364Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp</th>\\n\",\n       \"      <th>sd</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>183.314286</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>105.136364</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>353.100000</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      cyl        disp        sd\\n\",\n       \"  <int64>   <float64> <float64>\\n\",\n       \"0       6  183.314286       NaN\\n\",\n       \"1       4  105.136364       NaN\\n\",\n       \"2       8  353.100000       NaN\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Unlike dplyr's summarise, f.disp can be reused.\\n\",\n    \"mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl) >> \\\\\\n\",\n    \"  summarise(disp=mean(f.disp), sd=sd(f.disp))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"d2f97ff6\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.297444Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.296691Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.306716Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.307142Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>cyl</th>\\n\",\n       \"      <th>disp_m2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>366.628571</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>210.272727</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>706.200000</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      cyl     disp_m2\\n\",\n       \"  <int64>   <float64>\\n\",\n       \"0       6  366.628571\\n\",\n       \"1       4  210.272727\\n\",\n       \"2       8  706.200000\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Create temporary variable\\n\",\n    \"mtcars >> \\\\\\n\",\n    \"  group_by(f.cyl) >> \\\\\\n\",\n    \"  summarise(_disp_m2=mean(f.disp), disp_m2=f._disp_m2 * 2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"f4bd8382\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:34.322222Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:34.321493Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:34.328938Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:34.329394Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>avg</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>97.311864</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         avg\\n\",\n       \"   <float64>\\n\",\n       \"0  97.311864\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"var = \\\"mass\\\"\\n\",\n    \"starwars >> summarise(avg = mean(f[var]))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"datar-TA_GutPO-py3.12\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.12.2\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/tibble.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"8b02806d\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:10.487937Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:10.487068Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.408146Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.408553Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Ftibble.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ tibble</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Constructs a data frame\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: A set of name-value pairs.  \\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_rows`: Number of rows of a 0-col dataframe when args and kwargs are  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;not provided. When args or kwargs are provided, this is ignored.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_dtypes`: The dtypes for each columns to convert to.  \\n\",\n       \"&emsp;&emsp;`_drop_index`: Whether drop the index for the final data frame  \\n\",\n       \"&emsp;&emsp;`_index`: The new index of the output frame  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A constructed tibble  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ tibble_row</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Constructs a data frame that is guaranteed to occupy one row.\\n\",\n       \"Scalar values will be wrapped with `[]`  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*args`: and  \\n\",\n       \"&emsp;&emsp;`**kwargs`: A set of name-value pairs.  \\n\",\n       \"&emsp;&emsp;`_name_repair`: treatment of problematic column names:  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"minimal\\\": No name repair or checks, beyond basic existence,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"unique\\\": Make sure names are unique and not empty,\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"check_unique\\\": (default value), no name repair,\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;&emsp;&emsp;but check they are unique,  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- \\\"universal\\\": Make the names unique and syntactic\\n\",\n       \"\\n\",\n       \"&emsp;&emsp;&emsp;&emsp;- a function: apply custom name repair\\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A constructed dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ tribble</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Create dataframe using an easier to read row-by-row layout\\n\",\n       \"Unlike original API that uses formula (`f.col`) to indicate the column  \\n\",\n       \"names, we use `f.col` to indicate them.  \\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`*dummies`: Arguments specifying the structure of a dataframe  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Variable names should be specified with `f.name`  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_dtypes`: The dtypes for each columns to convert to.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;A dataframe  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tibble.tidyverse.org/reference/tibble.html\\n\",\n    \"# https://tibble.tidyverse.org/reference/tribble.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar import f\\n\",\n    \"from datar.tibble import tibble, tibble_row, tribble\\n\",\n    \"from datar.base import diag, runif\\n\",\n    \"from datar.dplyr import mutate\\n\",\n    \"\\n\",\n    \"nb_header(tibble, tibble_row, tribble)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"a786d6b2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.415801Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.415073Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.553606Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.552951Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       0       0\\n\",\n       \"1       1       2\\n\",\n       \"2       2       4\\n\",\n       \"3       3       6\\n\",\n       \"4       4       8\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"a = range(5)\\n\",\n    \"tibble(a=a, b=f.a*2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"875fe6f2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.560578Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.558571Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.583056Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.583527Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b       c\\n\",\n       \"  <int64> <int64> <int64>\\n\",\n       \"0       0       0       1\\n\",\n       \"1       1       2       1\\n\",\n       \"2       2       4       1\\n\",\n       \"3       3       6       1\\n\",\n       \"4       4       8       1\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(a=a, b=f.a * 2, c=1)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"fc39e6d2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.589246Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.588647Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.607914Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.608285Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.639511</td>\\n\",\n       \"      <td>1.279022</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.573888</td>\\n\",\n       \"      <td>1.147776</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.123471</td>\\n\",\n       \"      <td>0.246943</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.807206</td>\\n\",\n       \"      <td>1.614412</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.159120</td>\\n\",\n       \"      <td>0.318241</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>5</th>\\n\",\n       \"      <td>0.893697</td>\\n\",\n       \"      <td>1.787394</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>6</th>\\n\",\n       \"      <td>0.897584</td>\\n\",\n       \"      <td>1.795168</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>7</th>\\n\",\n       \"      <td>0.159780</td>\\n\",\n       \"      <td>0.319559</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>0.919717</td>\\n\",\n       \"      <td>1.839433</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>0.304561</td>\\n\",\n       \"      <td>0.609122</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x         y\\n\",\n       \"  <float64> <float64>\\n\",\n       \"0  0.639511  1.279022\\n\",\n       \"1  0.573888  1.147776\\n\",\n       \"2  0.123471  0.246943\\n\",\n       \"3  0.807206  1.614412\\n\",\n       \"4  0.159120  0.318241\\n\",\n       \"5  0.893697  1.787394\\n\",\n       \"6  0.897584  1.795168\\n\",\n       \"7  0.159780  0.319559\\n\",\n       \"8  0.919717  1.839433\\n\",\n       \"9  0.304561  0.609122\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x=runif(10), y=f.x*2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"id\": \"dada58f8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.620997Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.615155Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.625329Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.625705Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[NameNonUniqueError] Names must be unique: 1\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"x = 1\\n\",\n    \"with try_catch():\\n\",\n    \"    tibble(x, x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"id\": \"8a22cb4b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.632085Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.631328Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.653232Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.653724Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:48:49][datar][WARNING] New names:\\n\",\n      \"[2022-12-02 14:48:49][datar][WARNING] * '1' -> '1__0'\\n\",\n      \"[2022-12-02 14:48:49][datar][WARNING] * '1' -> '1__1'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>1__0</th>\\n\",\n       \"      <th>1__1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"     1__0    1__1\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x, x, _name_repair=\\\"unique\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"id\": \"6007cacc\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.705803Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.705211Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.709633Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.710113Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <th>1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        1       1\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x, x, _name_repair=\\\"minimal\\\") # duplicated columns allowed\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"id\": \"aadc8985\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.725364Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.724805Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.746001Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.746392Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:49:00][datar][WARNING] New names:\\n\",\n      \"[2022-12-02 14:49:00][datar][WARNING] * '1' -> '_1'\\n\",\n      \"[2022-12-02 14:49:00][datar][WARNING] * '2' -> '_2'\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>_1</th>\\n\",\n       \"      <th>_2</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       _1      _2\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       2\"\n      ]\n     },\n     \"execution_count\": 9,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"a = 1\\n\",\n    \"tibble(a * 1, a * 2, _name_repair=\\\"universal\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"id\": \"7a863e15\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.772009Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.771418Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.782345Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.782803Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <th>1_1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        1     1_1\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from typing import Iterable\\n\",\n    \"# use annotation to tell it's all names\\n\",\n    \"# not only a single name\\n\",\n    \"def make_unique(names: Iterable[str]): \\n\",\n    \"    new_names = []\\n\",\n    \"    for name in names:\\n\",\n    \"        name_count = new_names.count(name)\\n\",\n    \"        if name_count == 0:\\n\",\n    \"            new_names.append(name)\\n\",\n    \"        else:\\n\",\n    \"            new_names.append(f'{name}_{name_count}')\\n\",\n    \"    return new_names\\n\",\n    \"\\n\",\n    \"tibble(a, a, _name_repair=make_unique)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"id\": \"c76a319b\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.806211Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.805521Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.821359Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.821905Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <th>3</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        2       3\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       2       3\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# if not annotation specified\\n\",\n    \"# assuming a single name\\n\",\n    \"def fix_names(name):\\n\",\n    \"    import re\\n\",\n    \"    return re.sub(r'\\\\s+', '_', name)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"tibble(a + 1, a + 2, _name_repair = fix_names)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"id\": \"20cff9a2\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.880394Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.879447Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.899118Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.898664Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a       b\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x, x, _name_repair=[\\\"a\\\", \\\"b\\\"])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"id\": \"7e006c14\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.922711Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.922043Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:11.950480Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:11.950869Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"      <th>c</th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>d</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>4</td>\\n\",\n       \"      <td>7</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>4</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>5</td>\\n\",\n       \"      <td>8</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>6</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>6</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        b       c       a       d\\n\",\n       \"  <int64> <int64> <int64> <int64>\\n\",\n       \"0       4       7       0       4\\n\",\n       \"1       5       8       1       5\\n\",\n       \"2       6       9       2       6\"\n      ]\n     },\n     \"execution_count\": 13,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(\\n\",\n    \"  tibble(\\n\",\n    \"    b = [4,5,6],\\n\",\n    \"    c = [7,8,9]\\n\",\n    \"  ),\\n\",\n    \"  a = range(3),\\n\",\n    \"  d = f.b\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"id\": \"2d9a00e0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:11.969013Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:11.968444Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.016367Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.016822Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b$0</th>\\n\",\n       \"      <th>b$1</th>\\n\",\n       \"      <th>b$2</th>\\n\",\n       \"      <th>b$3</th>\\n\",\n       \"      <th>c$x$0</th>\\n\",\n       \"      <th>c$x$1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a     b$0     b$1     b$2     b$3   c$x$0   c$x$1\\n\",\n       \"  <int64> <int64> <int64> <int64> <int64> <int64> <int64>\\n\",\n       \"0       0       1       0       0       0       1       0\\n\",\n       \"1       1       0       1       0       0       0       1\\n\",\n       \"2       2       0       0       1       0       0       0\\n\",\n       \"3       3       0       0       0       1       0       0\"\n      ]\n     },\n     \"execution_count\": 14,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"s = tibble(diag(1, 4))\\n\",\n    \"t = tibble(s.iloc[:, :2], _name_repair=['x', 'y'])\\n\",\n    \"tibble(\\n\",\n    \"  a=range(4),\\n\",\n    \"  b=s,\\n\",\n    \"  c=t\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"id\": \"bdef0cd4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.023191Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.022331Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.033135Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.033516Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[ValueError] `b` must be size [1 3], not 4.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"with try_catch():\\n\",\n    \"    tibble(a=range(3), b=range(4))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"id\": \"0b39dd2f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.039777Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.038743Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.285097Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.285549Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>.dotted</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"   .dotted\\n\",\n       \"   <int64>\\n\",\n       \"0        3\"\n      ]\n     },\n     \"execution_count\": 16,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(_dotted = 3, _name_repair=lambda x: x.replace('_', '.'))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"id\": \"e066dd0e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.346792Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.345984Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.458197Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.458863Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 17,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"x = 3\\n\",\n    \"tibble(x=1, y=f.x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"id\": \"065802b4\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.491292Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.490533Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.501385Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.501890Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x       y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       3\"\n      ]\n     },\n     \"execution_count\": 18,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble(x=1, y=x)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"id\": \"948a38e3\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.514668Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.513896Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.521217Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.521659Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>colA</th>\\n\",\n       \"      <th>colB</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>c</td>\\n\",\n       \"      <td>3</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"      colA    colB\\n\",\n       \"  <object> <int64>\\n\",\n       \"0        a       1\\n\",\n       \"1        b       2\\n\",\n       \"2        c       3\"\n      ]\n     },\n     \"execution_count\": 19,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tribble(\\n\",\n    \"  f.colA, f.colB,\\n\",\n    \"  \\\"a\\\",    1,\\n\",\n    \"  \\\"b\\\",    2,\\n\",\n    \"  \\\"c\\\",    3\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"id\": \"3730b8a8\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.536248Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.535536Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.542704Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.543208Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>[1, 2, 3]</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>[4, 5, 6]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x          y\\n\",\n       \"  <object>   <object>\\n\",\n       \"0        a  [1, 2, 3]\\n\",\n       \"1        b  [4, 5, 6]\"\n      ]\n     },\n     \"execution_count\": 20,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tribble(\\n\",\n    \"  f.x,  f.y,\\n\",\n    \"  \\\"a\\\",  [1,2,3],\\n\",\n    \"  \\\"b\\\",  [4,5,6]\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"id\": \"057cd848\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:12.589393Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:12.588770Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:12.597896Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:12.598334Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>a</th>\\n\",\n       \"      <th>b</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>[2, 3]</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        a        b\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       1   [2, 3]\"\n      ]\n     },\n     \"execution_count\": 21,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"tibble_row(a=1, b=[[2,3]])\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 22,\n   \"id\": \"b1a7d485\",\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y$y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        x     y$y\\n\",\n       \"  <int64> <int64>\\n\",\n       \"0       1       1\"\n      ]\n     },\n     \"execution_count\": 22,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# inside a verb\\n\",\n    \"\\n\",\n    \"tibble(x=1) >> mutate(y=tibble(y=f.x))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/uncount.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"c822a641\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:41.539542Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:41.538779Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.396417Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.396954Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Funcount.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ uncount</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Duplicating rows according to a weighting variable\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame  \\n\",\n       \"&emsp;&emsp;`weights`: A vector of weights. Evaluated in the context of data  \\n\",\n       \"&emsp;&emsp;`_remove`: If TRUE, and weights is the name of a column in data,  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;then this column is removed.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_id`: Supply a string to create a new variable which gives a  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;unique identifier for each created row (0-based).  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;dataframe with rows repeated.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/uncount.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(uncount)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"597c386a\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.429322Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.428768Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.617412Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.617782Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x\\n\",\n       \"  <object>\\n\",\n       \"0        a\\n\",\n       \"1        b\\n\",\n       \"2        b\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(x = c(\\\"a\\\", \\\"b\\\"), n = c(1, 2))\\n\",\n    \"df >> uncount(f.n)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"ba0f3bcb\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.745543Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.744874Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.766238Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.766615Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>id</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"       id        x\\n\",\n       \"  <int64> <object>\\n\",\n       \"0       0        a\\n\",\n       \"1       1        b\\n\",\n       \"2       1        b\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> uncount(f.n, _id=\\\"id\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"aac00379\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.804374Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.803762Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.839607Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.840394Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>n</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>2</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x       n\\n\",\n       \"  <object> <int64>\\n\",\n       \"0        a       1\\n\",\n       \"1        a       1\\n\",\n       \"2        b       2\\n\",\n       \"3        b       2\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"uncount(df, 2)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"93f8367f\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:42.860672Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:42.860109Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:42.872296Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:42.872858Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x\\n\",\n       \"  <object>\\n\",\n       \"0        a\\n\",\n       \"1        a\\n\",\n       \"2        b\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> uncount(2//f.n)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"id\": \"2734c069\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/unite.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"35dd20d5\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:16.606534Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:16.605830Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:17.907102Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:17.907562Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Funite.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ unite</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Unite multiple columns into one by pasting strings together\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`data`: A data frame.  \\n\",\n       \"&emsp;&emsp;`col`: The name of the new column, as a string or symbol.  \\n\",\n       \"&emsp;&emsp;`*columns`: Columns to unite  \\n\",\n       \"&emsp;&emsp;`sep`: Separator to use between values.  \\n\",\n       \"&emsp;&emsp;`remove`: If True, remove input columns from output data frame.  \\n\",\n       \"&emsp;&emsp;`na_rm`: If True, missing values will be remove prior to uniting  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;each value.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The dataframe with selected columns united  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://tidyr.tidyverse.org/reference/unite.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(unite)\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"6edc9543\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:17.921087Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:17.920349Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:18.288917Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:18.286498Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x        y\\n\",\n       \"  <object> <object>\\n\",\n       \"0        a        b\\n\",\n       \"1        a      NaN\\n\",\n       \"2      NaN        b\\n\",\n       \"3      NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = expand_grid(x=c(\\\"a\\\", NA), y=c(\\\"b\\\", NA))\\n\",\n    \"df\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"74d75279\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:18.336918Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:18.336162Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:18.874250Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:18.874650Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a_b</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td></td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         z        x        y\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0      a_b        a        b\\n\",\n       \"1        a        a      NaN\\n\",\n       \"2        b      NaN        b\\n\",\n       \"3               NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unite(\\\"z\\\", c(f.x, f.y), remove=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"1d97911c\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:18.975591Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:18.974873Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:19.105442Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:19.107130Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>z</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a_b</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td></td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         z        x        y\\n\",\n       \"  <object> <object> <object>\\n\",\n       \"0      a_b        a        b\\n\",\n       \"1        a        a      NaN\\n\",\n       \"2        b      NaN        b\\n\",\n       \"3               NaN      NaN\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> unite(\\\"z\\\", [0, 1], na_rm=True, remove=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"77331626\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:28:19.260230Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:28:19.259595Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:28:19.429797Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:28:19.430243Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"[2022-12-02 14:51:25][datar][WARNING] Expected 2 pieces. Missing pieces filled with `NA` in 3 rows ['a', 'b', ''].\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>y</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;object&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>b</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>a</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>b</td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td></td>\\n\",\n       \"      <td>NaN</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"         x        y\\n\",\n       \"  <object> <object>\\n\",\n       \"0        a        b\\n\",\n       \"1        a      NaN\\n\",\n       \"2        b      NaN\\n\",\n       \"3               NaN\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> \\\\\\n\",\n    \"  unite(\\\"xy\\\", c(f.x, f.y)) >> \\\\\\n\",\n    \"  separate(f.xy, c(\\\"x\\\", \\\"y\\\"))\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/notebooks/with_groups.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"86647a1e\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:23.471684Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:23.470754Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:24.596869Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:24.592829Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div style=\\\"text-align: right; text-style: italic\\\">Try this notebook on <a target=\\\"_blank\\\" href=\\\"https://mybinder.org/v2/gh/pwwang/datar/dev?filepath=docs%2Fnotebooks%2Fwith_groups.ipynb\\\">binder</a>.</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.HTML object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"### <div style=\\\"background-color: #EEE; padding: 5px 0 8px 0\\\">★ with_groups</div>\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"text/markdown\": [\n       \"##### Modify the grouping variables for a single operation.\\n\",\n       \"\\n\",\n       \"##### Args:\\n\",\n       \"&emsp;&emsp;`_data`: A data frame  \\n\",\n       \"&emsp;&emsp;`_groups`: columns passed by group_by  \\n\",\n       \"&emsp;&emsp;&emsp;&emsp;Use None to temporarily ungroup.  \\n\",\n       \"\\n\",\n       \"&emsp;&emsp;`_func`: Function to apply to regrouped data.  \\n\",\n       \"\\n\",\n       \"##### Returns:\\n\",\n       \"&emsp;&emsp;The new data frame with operations applied.  \\n\"\n      ],\n      \"text/plain\": [\n       \"<IPython.core.display.Markdown object>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"# https://dplyr.tidyverse.org/reference/with_groups.html\\n\",\n    \"%run nb_helpers.py\\n\",\n    \"\\n\",\n    \"from datar.all import *\\n\",\n    \"\\n\",\n    \"nb_header(with_groups)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"139a79fa\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:24.654249Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:24.653532Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:25.280451Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:25.281069Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>x_mean</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"      <td>0.525006</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.805402</td>\\n\",\n       \"      <td>0.525006</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"      <td>0.829213</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.795719</td>\\n\",\n       \"      <td>0.829213</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=3)\"\n      ],\n      \"text/plain\": [\n       \"        g         x    x_mean\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       1  0.244611  0.525006\\n\",\n       \"1       1  0.805402  0.525006\\n\",\n       \"2       2  0.862707  0.829213\\n\",\n       \"3       2  0.795719  0.829213\\n\",\n       \"4       3  0.812910  0.812910\\n\",\n       \"[TibbleGrouped: g (n=3)]\"\n      ]\n     },\n     \"execution_count\": 2,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df = tibble(g=c(1, 1, 2, 2, 3), x=runif(5))\\n\",\n    \"df >> with_groups(f.g, mutate, x_mean = mean(f.x)) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"65133081\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:25.407736Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:25.407070Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:25.456650Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:25.457055Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>x1</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.805402</td>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.795719</td>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\",\n       \"<p>TibbleGrouped: g (n=3)\"\n      ],\n      \"text/plain\": [\n       \"        g         x        x1\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       1  0.244611  0.244611\\n\",\n       \"1       1  0.805402  0.244611\\n\",\n       \"2       2  0.862707  0.862707\\n\",\n       \"3       2  0.795719  0.862707\\n\",\n       \"4       3  0.812910  0.812910\\n\",\n       \"[TibbleGrouped: g (n=3)]\"\n      ]\n     },\n     \"execution_count\": 3,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> with_groups(f.g, lambda df: df >> mutate(x1 = first(f.x))) \"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"id\": \"1c9e8a12\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:25.523727Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:25.522838Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:25.804228Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:25.806102Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>g</th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"      <th>x_mean</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;int64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"      <td>0.70427</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0.805402</td>\\n\",\n       \"      <td>0.70427</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"      <td>0.70427</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>2</td>\\n\",\n       \"      <td>0.795719</td>\\n\",\n       \"      <td>0.70427</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>3</td>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"      <td>0.70427</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"        g         x    x_mean\\n\",\n       \"  <int64> <float64> <float64>\\n\",\n       \"0       1  0.244611   0.70427\\n\",\n       \"1       1  0.805402   0.70427\\n\",\n       \"2       2  0.862707   0.70427\\n\",\n       \"3       2  0.795719   0.70427\\n\",\n       \"4       3  0.812910   0.70427\"\n      ]\n     },\n     \"execution_count\": 4,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> \\\\\\n\",\n    \"  group_by(f.g) >> \\\\\\n\",\n    \"  with_groups(None, mutate, x_mean = mean(f.x))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"id\": \"ec8f5fe0\",\n   \"metadata\": {\n    \"execution\": {\n     \"iopub.execute_input\": \"2021-07-16T22:27:25.983097Z\",\n     \"iopub.status.busy\": \"2021-07-16T22:27:25.982377Z\",\n     \"iopub.status.idle\": \"2021-07-16T22:27:26.253418Z\",\n     \"shell.execute_reply\": \"2021-07-16T22:27:26.253859Z\"\n    }\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>x</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th style=\\\"font-style: italic;\\\" ></th>\\n\",\n       \"      <td style=\\\"font-style: italic;\\\" >&lt;float64&gt;</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>0.244611</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>1</th>\\n\",\n       \"      <td>0.805402</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>2</th>\\n\",\n       \"      <td>0.862707</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>3</th>\\n\",\n       \"      <td>0.795719</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>4</th>\\n\",\n       \"      <td>0.812910</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\\n\"\n      ],\n      \"text/plain\": [\n       \"          x\\n\",\n       \"  <float64>\\n\",\n       \"0  0.244611\\n\",\n       \"1  0.805402\\n\",\n       \"2  0.862707\\n\",\n       \"3  0.795719\\n\",\n       \"4  0.812910\"\n      ]\n     },\n     \"execution_count\": 5,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df >> \\\\\\n\",\n    \"  group_by(f.g) >> \\\\\\n\",\n    \"  with_groups(None, mutate, g=None)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3.9.5 ('base')\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.9.5\"\n  },\n  \"vscode\": {\n   \"interpreter\": {\n    \"hash\": \"9ed5c94d10bf621c6841991b7e31ffd0f3c8de8ec4167710459737a50edc58e4\"\n   }\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "docs/options.md",
    "content": "Options are used to change some behaviors in `datar`.\n\nFor environment variable configuration (such as controlling verb AST fallback behavior), see [Environment Variables](ENV_VARS.md).\n\n## Available options\n\n### allow_conflict_names\n\nWhether to allow conflict names that reversed by python. For example, `filter` is a python builtin function, but also a `dplyr` function. You should use `filter_` instead. By default, `datar` will raise an error when you try to import `filter`. You can set this option to `True` to allow this behavior.\n\n```python\n>>> from datar.all import filter\n>>> # or from datar.dplyr import filter\nTraceback (most recent call last):\n  File \"<stdin>\", line 1, in <module>\nImportError: cannot import name 'filter' from 'datar.all'\n```\n\n```python\n>>> from datar import options\n>>> options(allow_conflict_names=True)\n>>> from datar.all import filter\n>>> filter\n<function filter_ at 0x7f76b34c0940>\n```\n\nThe conflict names under `datar.base` are:\n\n- `min`\n- `max`\n- `sum`\n- `abs`\n- `round`\n- `all`\n- `any`\n- `re`\n\nThe conflict names under `datar.dplyr` are:\n\n- `filter`\n- `slice`\n\n### backends\n\nIf you have multiple backends installed, you can use this option to specify which backends to use.\n\n## Configuration files\n\nYou can change the default behavior of datar by configuring a `.toml.toml` file in your home directory. For example, to always use underscore-suffixed names for conflicting names, you can add the following to your `~/.datar.toml` file:\n\n```toml\nallow_conflict_names = true\n```\n\nYou can also have a project/directory-based configuration file (`./.datar.toml`) in your current working directory, which has higher priority than the home directory configuration file.\n"
  },
  {
    "path": "docs/reference-maps/ALL.md",
    "content": "\n|Module|Description|Reference|\n|-|-|-|\n|`base`|APIs ported from `r-base/r-stats/r-utils`|[:octicons-cross-reference-16:][5]|\n|#|#|#|\n|`dplyr`|APIs ported from `tidyverse/dplyr`|[:octicons-cross-reference-16:][2]|\n|`tidyr`|APIs ported from `tidyverse/tidyr`|[:octicons-cross-reference-16:][4]|\n|`tibble`|APIs ported from `tidyverse/tibble`|[:octicons-cross-reference-16:][1]|\n|`forcats`|APIs ported from `tidyverse/forcats`|[:octicons-cross-reference-16:][9]|\n|#|#|#|\n|`datasets`|Datasets collected from `tidyverse` or other related packages|[:octicons-cross-reference-16:][3]|\n|#|#|#|\n|`datar`|Datar-specific verbs/functions|[:octicons-cross-reference-16:][6]|\n\n[1]: ../tibble\n[2]: ../dplyr\n[3]: ../datasets\n[4]: ../tidyr\n[5]: ../base\n[6]: ../datar\n[9]: ../forcats\n"
  },
  {
    "path": "docs/reference-maps/base.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.base`\n\nSee [here](../stats) for APIs ported from `r-stats` and [here](../utils) for APIs ported from `r-utils`\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Constants\n\n|API|Description|Notebook example|\n|---|---|---:|\n|`pi`|the ratio of the circumference of a circle to its diameter.|[:material-notebook:][4]|\n|`letters`|the 26 lower-case letters of the Roman alphabet|[:material-notebook:][4]|\n|`LETTERS`|the 26 upper-case letters of the Roman alphabet|[:material-notebook:][4]|\n|`month.abb`|the three-letter abbreviations for the English month names|[:material-notebook:][4]|\n|`month.name`|the English names for the months of the year|[:material-notebook:][4]|\n\n### Options\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`options`][5]|Allow the user to set and examine a variety of global _options_|[:material-notebook:][4]|\n|[`get_option()`][6]|Get the value of a certain option (R's `getOption()`)|[:material-notebook:][4]|\n|[**`options_context()`**][7]|A context manager to temporarily modify the options|[:material-notebook:][4]|\n\n### Arithmetic functions\n|API|Description|Notebook example|\n|---|---|---:|\n|[`mean()`][8]|Calculate the mean of the values|[:material-notebook:][151]|\n|[`median()`][9]|Calculate the median of the values|[:material-notebook:][151]|\n|[`min()`][10]|Calculate the min of the values|[:material-notebook:][151]|\n|[`max()`][11]|Calculate the max of the values|[:material-notebook:][151]|\n|[`pmin()`][12]|Calculate the min of the values rowwisely|[:material-notebook:][151]|\n|[`pmax()`][13]|Calculate the max of the values rowwisely|[:material-notebook:][151]|\n|[`sum()`][14]|Calculate the sum of the values|[:material-notebook:][151]|\n|[`abs()`][15]|Calculate the absolute values of the values|[:material-notebook:][151]|\n|[`round()`][16]|Round the numbers|[:material-notebook:][151]|\n|[`var()`][17]|Calculate the variance of the values|[:material-notebook:][151]|\n|[`ceiling()`][18]|Get the ceiling integers of the numbers|[:material-notebook:][151]|\n|[`floor()`][19]|Get the floor integers of the numbers|[:material-notebook:][151]|\n|[`sqrt()`][20]|Get the square root of the numbers|[:material-notebook:][151]|\n|[`cov()`][21]|Calculate the covariance of the values|[:material-notebook:][151]|\n|[`prod()`][117]|Calculate Product of the input|[:material-notebook:][151]|\n|[`sign()`][118]|Get the signs of the corresponding elements of x|[:material-notebook:][151]|\n|[`signif()`][125]|Rounds the values in its first argument to the specified number of significant digits|[:material-notebook:][151]|\n|[`trunc()`][119]|Get the integers truncated for each element in x|[:material-notebook:][151]|\n|[`exp()`][120]|Calculates the power of natural number|[:material-notebook:][151]|\n|[`log()`][121]|Computes logarithms, by default natural logarithm|[:material-notebook:][151]|\n|[`log2()`][122]|Computes logarithms with base 2|[:material-notebook:][151]|\n|[`log10()`][123]|Computes logarithms with base 10|[:material-notebook:][151]|\n|[`log1p()`][124]|Computes log(1+x)|[:material-notebook:][151]|\n|[`quantile()`][152]|Produces sample quantiles corresponding to the given probabilities.|[:material-notebook:][151]|\n|[`sd()`, `std()`][153]|Computes the standard deviation of the values|[:material-notebook:][151]|\n|[`weighted_mean()`][154]|Computes the weighted mean of the values|[:material-notebook:][151]|\n|[`col_sums()`][155]|Computes column sums of a dataframe|[:material-notebook:][151]|\n|[`row_sums()`][156]|Computes row sums of a dataframe|[:material-notebook:][151]|\n|[`col_means()`][157]|Computes column means of a dataframe|[:material-notebook:][151]|\n|[`row_means()`][158]|Computes row means of a dataframe|[:material-notebook:][151]|\n|[`col_sds()`][159]|Computes column sds of a dataframe|[:material-notebook:][151]|\n|[`row_sds()`][160]|Computes row sds of a dataframe|[:material-notebook:][151]|\n|[`col_medians()`][161]|Computes column medians of a dataframe|[:material-notebook:][151]|\n|[`row_medians()`][162]|Computes row medians of a dataframe|[:material-notebook:][151]|\n\n### Bessel functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`bessel_i()`][22]|Bessel Functions of integer and fractional order of first kind|[:material-notebook:][4]|\n|[`bessel_k()`][24]|Bessel Functions of integer and fractional order of second kind|[:material-notebook:][4]|\n|[`bessel_j()`][23]|Modified Bessel functions of first kind|[:material-notebook:][4]|\n|[`bessel_y()`][25]|Modified Bessel functions of third kind|[:material-notebook:][4]|\n\n### Casting values between types\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`as_integer()`][26] [`as_int`][26]|Cast data to integer|[:material-notebook:][4]|\n|[`as_double()`][27]|Cast data to double (`numpy.float64`)|[:material-notebook:][4]|\n|[`as_float()`][28]|Cast data to float (`numpy.float_`)|[:material-notebook:][4]|\n|[`as_numeric()`][29]|Cast data to numeric|[:material-notebook:][4]|\n\n### Complex numbers\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`re()`][30]|Get the real part of a complex number|[:material-notebook:][4]|\n|[`mod()`][31]|Get the modulus of a complex number|[:material-notebook:][4]|\n|[`im()`][32]|Get the imaginary part of a complex number|[:material-notebook:][4]|\n|[`arg()`][33]|Get the argument of a complex number|[:material-notebook:][4]|\n|[`conj()`][34]|Get the complex conjugate of a complex number|[:material-notebook:][4]|\n|[`is_complex()`][35]|Test if data is complex number|[:material-notebook:][4]|\n|[`as_complex()`][36]|Cast data to a complex number|[:material-notebook:][4]|\n\n### Cumulativate functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`cumsum()`][37]|Cummulative sum|[:material-notebook:][4]|\n|[`cumprod()`][38]|Cummulative product|[:material-notebook:][4]|\n|[`cummin()`][39]|Cummulative min|[:material-notebook:][4]|\n|[`cummax()`][40]|Cummulative max|[:material-notebook:][4]|\n\n### Date functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`as_date()`][41]|Cast data to date|[:material-notebook:][4]|\n|[**`as_pd_date()`**][150]|Alias of `pandas.to_datetime()`||\n\n### Factor data\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`factor()`][42]|Construct factor|[:material-notebook:][4]|\n|[`droplevels()`][43]|Drop unused levels|[:material-notebook:][4]|\n|[`levels()`][44]|Get levels of factors|[:material-notebook:][4]|\n|[`is_factor()`][45] [`is_categorical`][45]|Test if data is factor|[:material-notebook:][4]|\n|[`as_factor()`][46] [`as_categorical`][46]|Cast data to factor|[:material-notebook:][4]|\n|[`is_ordered()`][140]|Check if a factor is ordered||\n|[`nlevels()`][141]|Get number of levels of a factor||\n|[`ordered()`][142]|Create an ordered factor||\n\n### Logical/Boolean values\n\n|API|Description|Notebook example|\n|---|---|---:|\n|`TRUE`|Logical true|[:material-notebook:][4]|\n|`FALSE`|Logical false|[:material-notebook:][4]|\n|[`is_true()`][47]|Test if data is scalar true (R's `isTRUE`)|[:material-notebook:][4]|\n|[`is_false()`][48]|Test if data is scalar false (R's `FALSE`)|[:material-notebook:][4]|\n|[`is_logical()`][49] [`is_bool()`][49]|Test if data is logical/boolean|[:material-notebook:][4]|\n|[`as_logical()`][50] [`as_bool()`][50]|Cast data to logical/boolean|[:material-notebook:][4]|\n\n### NA (missing values)\n\n|API|Description|Notebook example|\n|---|---|---:|\n|`Inf`|Infinite number|[:material-notebook:][4]|\n|`NA`|Missing value|[:material-notebook:][4]|\n|`NaN`|Missing value, same as `NA`|[:material-notebook:][4]|\n|[`is_na()`][51]|Test if data is NA|[:material-notebook:][4]|\n|[`any_na()`][52]|Test if any element is NA|[:material-notebook:][4]|\n|[`is_finite()`][126]|Test if x is finite||\n|[`is_infinite()`][127]|Test if x is infinite||\n|[`is_nan()`][128]|Test if x is nan||\n\n### NULL\n\n|API|Description|Notebook example|\n|---|---|---:|\n|`NULL`|NULL value|[:material-notebook:][4]|\n|[`is_null()`][53]|Test if data is null|[:material-notebook:][4]|\n|[`as_null()`][54]|Cast anything to NULL|[:material-notebook:][4]|\n\n### Random\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`set_seed()`][55]|Set the randomization seed|[:material-notebook:][4]|\n\n### Functions to create and manipulate sequences\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`c()`][56]|Collection of data|[:material-notebook:][4]|\n|[`seq()`][57]|Generate sequence|[:material-notebook:][4]|\n|[`seq_len()`][58]|Generate sequence with length|[:material-notebook:][4]|\n|[`seq_along()`][59]|Generate sequence along with another sequence|[:material-notebook:][4]|\n|[`rev()`][60]|Reverse a sequence|[:material-notebook:][4]|\n|[`rep()`][61]|Generate sequence with repeats|[:material-notebook:][4]|\n|[`lengths()`][62]|Get the length of elements in the sequence|[:material-notebook:][4]|\n|[`unique()`][63]|Get the unique elements|[:material-notebook:][4]|\n|[`sample()`][64]|Sample the elements from sequence|[:material-notebook:][4]|\n|[`length()`][65]|Get the length of data|[:material-notebook:][4]|\n|[`match()`][129]|match returns a vector of the positions of (first) matches of its first argument in its second.||\n|[`rank()`][143]|Returns the sample ranks of the values in a vector.|[:material-notebook:][163]|\n|[`order()`][144]|Returns a permutation which rearranges its first argument into ascending or descending order||\n|[`sort()`][145]|Sorting or Ordering Vectors||\n\n### Special functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`beta()`][66]|Beta function|[:material-notebook:][4]|\n|[`lbeta()`][67]|Natural logarithm of beta function|[:material-notebook:][4]|\n|[`gamma()`][68]|Gamma function|[:material-notebook:][4]|\n|[`lgamma()`][69]|Natural logarithm of gamma function|[:material-notebook:][4]|\n|[`digamma()`][70]|the first derivatives of the logarithm of the gamma function.|[:material-notebook:][4]|\n|[`trigamma()`][71]|the second derivatives of the logarithm of the gamma function.|[:material-notebook:][4]|\n|[`psigamma()`][72]|polygamma funnction|[:material-notebook:][4]|\n|[`choose()`][73]|binomial coefficients|[:material-notebook:][4]|\n|[`lchoose()`][74]|the logarithms of binomial coefficients.|[:material-notebook:][4]|\n|[`factorial()`][75]|factorial|[:material-notebook:][4]|\n|[`lfactorial()`][76]|Natural logarithm of factorial|[:material-notebook:][4]|\n\n### String functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`is_character()`][77] [`is_str`][77] [`is_string`][77]|Test if data is string|[:material-notebook:][4]|\n|[`as_character()`][78] [`as_str`][78] [`as_string`][78]|Cast data to string|[:material-notebook:][4]|\n|[`grep()`][79]|Test if pattern in string|[:material-notebook:][4]|\n|[`grepl()`][80]|Logical version of `grep`|[:material-notebook:][4]|\n|[`sub()`][81]|Replace substrings in strings|[:material-notebook:][4]|\n|[`gsub()`][82]|Replace all matched substring in strings|[:material-notebook:][4]|\n|[`nchar()`][83]|Get length of string|[:material-notebook:][4]|\n|[`nzhcar()`][84]|Test if string is not empty|[:material-notebook:][4]|\n|[`paste()`][85]|Concatenate strings|[:material-notebook:][4]|\n|[`paste0()`][86]|Concatenate strings with `sep=''`|[:material-notebook:][4]|\n|[`sprintf()`][87]|C-style string formatting|[:material-notebook:][4]|\n|[`substr()`][88]|Get substring|[:material-notebook:][4]|\n|[`substring()`][89]|Get substring with a start only|[:material-notebook:][4]|\n|[`strsplit()`][90]|Split strings with delimiter|[:material-notebook:][4]|\n|[`startswith()`][130]|Test if strings start with given prefix||\n|[`endswith()`][131]|Test if strings end with given suffix||\n|[`strtoi()`][132]|Convert strings to integers||\n|[`chartr()`][133]|Replace characters in strings||\n|[`tolower()`][134]|Transform strings to lower case||\n|[`toupper()`][135]|Transform strings to upper case||\n|[`trimws()`][149]|Remove leading and/or trailing whitespace from character strings.||\n\n### Table\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`table()`][91]|Cross Tabulation and Table Creation|[:material-notebook:][4]|\n|[`tabulate()`][146]|Takes the integer-valued vector `bin` and counts the number of times each integer occurs in it.||\n\n### Testing value types\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`is_double()`][92] [`is_float()`][92]|Test if data is double or float (`numpy.float_`)|[:material-notebook:][4]|\n|[`is_integer()`][93] [`is_int()`][93]|Test if data is integer|[:material-notebook:][4]|\n|[`is_numeric()`][94]|Test if data is numeric|[:material-notebook:][4]|\n|[`is_atomic()`][95]|Test is data is atomic|[:material-notebook:][4]|\n|[`is_element(), `is_in()`][96]|Test if value is an element of an array (R's `%in`)|[:material-notebook:][4]|\n\n### Trigonometric and hyper bolic functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`cos()`][97]|cosine|[:material-notebook:][4]|\n|[`sin()`][98]|sine|[:material-notebook:][4]|\n|[`tan()`][99]|tangent|[:material-notebook:][4]|\n|[`acos()`][100]|Arc-cosine|[:material-notebook:][4]|\n|[`asin()`][101]|Arc-sine|[:material-notebook:][4]|\n|[`atan()`][102]|Arc-tangent|[:material-notebook:][4]|\n|[`atan2()`][103]|`atan(y/x)`|[:material-notebook:][4]|\n|[`cospi()`][104]|`cos(pi*x)`|[:material-notebook:][4]|\n|[`sinpi()`][105]|`sin(pi*x)`|[:material-notebook:][4]|\n|[`tanpi()`][106]|`tan(pi*x)`|[:material-notebook:][4]|\n|[`cosh()`][107]|Hyperbolic cosine|[:material-notebook:][4]|\n|[`sinh()`][108]|Hyperbolic sine|[:material-notebook:][4]|\n|[`tanh()`][109]|Hyperbolic tangent|[:material-notebook:][4]|\n|[`acosh()`][110]|Hyperbolic cosine|[:material-notebook:][4]|\n|[`asinh()`][111]|Hyperbolic sine|[:material-notebook:][4]|\n|[`atanh()`][112]|Hyperbolic tangent|[:material-notebook:][4]|\n\n### Which\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[which()][1]|Which indices are True?|[:material-notebook:][4]|\n|[which_min()][2] [which_max()][3]|Where is the minimum or maximum or first TRUE or FALSE|[:material-notebook:][4]|\n\n### Other functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`glimpse()`][166]|Get a glimpse of your data||\n|[`cut()`][113]|Convert Numeric to Factor|[:material-notebook:][163]|\n|[`diff()`][164]|Returns suitably lagged and iterated differences.|[:material-notebook:][163]|\n|[`identity()`][114]|Identity Function|[:material-notebook:][163]|\n|[`expandgrid()`][115]|Create a Data Frame from All Combinations of Factor Variables|[:material-notebook:][163]|\n|[`outer()`][165]|Compute the outer product of two vectors.|[:material-notebook:][163]|\n|[`max_col()`][136]|Find the maximum position for each row of a matrix||\n|[`append()`][147]|Add elements to a vector.||\n|[`complete_cases()`][137]|Get a bool array indicating whether the values of rows are complete in a data frame.||\n|[`proportions()`][147], [`prop_table`][147]|Returns conditional proportions given `margins`||\n|[`make_names()`][137]|Make names available as columns and can be accessed by `df.<name>`|[:material-notebook:][163]|\n|[`make_unique()`][138]|Make the names unique, alias of `make_names(names, unique=True)`|[:material-notebook:][163]|\n\n\n[1]: ../../api/datar.base.which/#datar.dplyr.which.which\n[2]: ../../api/datar.base.which/#datar.dplyr.which.which_min\n[3]: ../../api/datar.base.which/#datar.dplyr.which.which_max\n[4]: ../../notebooks/base\n[5]: ../../api/datar.apis.core/#datar.apis.core.options\n[6]: ../../api/datar.apis.core/#datar.apis.core.get_option\n[7]: ../../api/datar.apis.core/#datar.apis.core.options_context\n[8]: ../../api/datar.apis.base/#datar.apis.base.mean\n[9]: ../../api/datar.apis.base/#datar.apis.base.median\n[10]: ../../api/datar.apis.base/#datar.apis.base.min\n[11]: ../../api/datar.apis.base/#datar.apis.base.max\n[12]: ../../api/datar.apis.base/#datar.apis.base.pmin\n[13]: ../../api/datar.apis.base/#datar.apis.base.pmax\n[14]: ../../api/datar.apis.base/#datar.apis.base.sum\n[15]: ../../api/datar.apis.base/#datar.apis.base.abs\n[16]: ../../api/datar.apis.base/#datar.apis.base.round\n[17]: ../../api/datar.apis.base/#datar.apis.base.var\n[18]: ../../api/datar.apis.base/#datar.apis.base.ceiling\n[19]: ../../api/datar.apis.base/#datar.apis.base.floor\n[20]: ../../api/datar.apis.base/#datar.apis.base.sqrt\n[21]: ../../api/datar.apis.base/#datar.apis.base.cov\n[22]: ../../api/datar.apis.base/#datar.apis.base.bessel_i\n[23]: ../../api/datar.apis.base/#datar.apis.base.bessel_j\n[24]: ../../api/datar.apis.base/#datar.apis.base.bessel_k\n[25]: ../../api/datar.apis.base/#datar.apis.base.bessel_y\n[26]: ../../api/datar.apis.base/#datar.apis.base.as_integer\n[27]: ../../api/datar.apis.base/#datar.apis.base.as_double\n[28]: ../../api/datar.apis.base/#datar.apis.base.as_float\n[29]: ../../api/datar.apis.base/#datar.apis.base.as_numeric\n[30]: ../../api/datar.apis.base/#datar.apis.base.re\n[31]: ../../api/datar.apis.base/#datar.apis.base.mod\n[32]: ../../api/datar.apis.base/#datar.apis.base.im\n[33]: ../../api/datar.apis.base/#datar.apis.base.arg\n[34]: ../../api/datar.apis.base/#datar.apis.base.conj\n[35]: ../../api/datar.apis.base/#datar.apis.base.is_complex\n[36]: ../../api/datar.apis.base/#datar.apis.base.as_complex\n[37]: ../../api/datar.apis.base/#datar.apis.base.cumsum\n[38]: ../../api/datar.apis.base/#datar.apis.base.cumprod\n[39]: ../../api/datar.apis.base/#datar.apis.base.cummin\n[40]: ../../api/datar.apis.base/#datar.apis.base.cummax\n[41]: ../../api/datar.apis.base/#datar.apis.base.as_date\n[42]: ../../api/datar.apis.base/#datar.apis.base.factor\n[43]: ../../api/datar.apis.base/#datar.apis.base.droplevels\n[44]: ../../api/datar.apis.base/#datar.apis.base.levels\n[45]: ../../api/datar.apis.base/#datar.apis.base.is_factor\n[46]: ../../api/datar.apis.base/#datar.apis.base.as_factor\n[47]: ../../api/datar.apis.base/#datar.apis.base.is_true\n[48]: ../../api/datar.apis.base/#datar.apis.base.is_false\n[49]: ../../api/datar.apis.base/#datar.apis.base.is_logical\n[50]: ../../api/datar.apis.base/#datar.apis.base.as_logical\n[51]: ../../api/datar.apis.base/#datar.apis.base.is_na\n[52]: ../../api/datar.apis.base/#datar.apis.base.any_na\n[53]: ../../api/datar.apis.base/#datar.apis.base.is_null\n[54]: ../../api/datar.apis.base/#datar.apis.base.as_null\n[55]: ../../api/datar.apis.base/#datar.apis.base.set_seed\n[56]: ../../api/datar.apis.base/#datar.apis.base.c\n[57]: ../../api/datar.apis.base/#datar.apis.base.seq\n[58]: ../../api/datar.apis.base/#datar.apis.base.seq_len\n[59]: ../../api/datar.apis.base/#datar.apis.base.seq_along\n[60]: ../../api/datar.apis.base/#datar.apis.base.rev\n[61]: ../../api/datar.apis.base/#datar.apis.base.rep\n[62]: ../../api/datar.apis.base/#datar.apis.base.lengths\n[63]: ../../api/datar.apis.base/#datar.apis.base.unique\n[64]: ../../api/datar.apis.base/#datar.apis.base.sample\n[65]: ../../api/datar.apis.base/#datar.apis.base.length\n[66]: ../../api/datar.apis.base/#datar.apis.base.beta\n[67]: ../../api/datar.apis.base/#datar.apis.base.lbeta\n[68]: ../../api/datar.apis.base/#datar.apis.base.gamma\n[69]: ../../api/datar.apis.base/#datar.apis.base.lgamma\n[70]: ../../api/datar.apis.base/#datar.apis.base.digamma\n[71]: ../../api/datar.apis.base/#datar.apis.base.trigamma\n[72]: ../../api/datar.apis.base/#datar.apis.base.psigamma\n[73]: ../../api/datar.apis.base/#datar.apis.base.choose\n[74]: ../../api/datar.apis.base/#datar.apis.base.lchoose\n[75]: ../../api/datar.apis.base/#datar.apis.base.factorial\n[76]: ../../api/datar.apis.base/#datar.apis.base.lfactorial\n[77]: ../../api/datar.apis.base/#datar.apis.base.is_character\n[78]: ../../api/datar.apis.base/#datar.apis.base.as_character\n[79]: ../../api/datar.apis.base/#datar.apis.base.grep\n[80]: ../../api/datar.apis.base/#datar.apis.base.grepl\n[81]: ../../api/datar.apis.base/#datar.apis.base.sub\n[82]: ../../api/datar.apis.base/#datar.apis.base.gsub\n[83]: ../../api/datar.apis.base/#datar.apis.base.nchar\n[84]: ../../api/datar.apis.base/#datar.apis.base.nzchar\n[85]: ../../api/datar.apis.base/#datar.apis.base.paste\n[86]: ../../api/datar.apis.base/#datar.apis.base.paste0\n[87]: ../../api/datar.apis.base/#datar.apis.base.sprintf\n[88]: ../../api/datar.apis.base/#datar.apis.base.substr\n[89]: ../../api/datar.apis.base/#datar.apis.base.substring\n[90]: ../../api/datar.apis.base/#datar.apis.base.strsplit\n[91]: ../../api/datar.apis.base/#datar.apis.base.table\n[92]: ../../api/datar.apis.base/#datar.apis.base.is_double\n[93]: ../../api/datar.apis.base/#datar.apis.base.is_float\n[94]: ../../api/datar.apis.base/#datar.apis.base.is_integer\n[95]: ../../api/datar.apis.base/#datar.apis.base.is_atomic\n[96]: ../../api/datar.apis.base/#datar.apis.base.is_element\n[97]: ../../api/datar.apis.base/#datar.apis.base.cos\n[98]: ../../api/datar.apis.base/#datar.apis.base.sin\n[99]: ../../api/datar.apis.base/#datar.apis.base.tan\n[100]: ../../api/datar.apis.base/#datar.apis.base.acos\n[101]: ../../api/datar.apis.base/#datar.apis.base.asin\n[102]: ../../api/datar.apis.base/#datar.apis.base.atan\n[103]: ../../api/datar.apis.base/#datar.apis.base.atan2\n[104]: ../../api/datar.apis.base/#datar.apis.base.cospi\n[105]: ../../api/datar.apis.base/#datar.apis.base.sinpi\n[106]: ../../api/datar.apis.base/#datar.apis.base.tanpi\n[107]: ../../api/datar.apis.base/#datar.apis.base.cosh\n[108]: ../../api/datar.apis.base/#datar.apis.base.sinh\n[109]: ../../api/datar.apis.base/#datar.apis.base.tanh\n[110]: ../../api/datar.apis.base/#datar.apis.base.acosh\n[111]: ../../api/datar.apis.base/#datar.apis.base.asinh\n[112]: ../../api/datar.apis.base/#datar.apis.base.atanh\n[113]: ../../api/datar.apis.base/#datar.apis.base.cut\n[114]: ../../api/datar.apis.base/#datar.apis.base.identity\n[115]: ../../api/datar.apis.base/#datar.apis.base.expandgrid\n[116]: ../../api/datar.apis.base/#datar.apis.base.data_context\n[117]: ../../api/datar.apis.base/#datar.apis.base.prod\n[118]: ../../api/datar.apis.base/#datar.apis.base.sign\n[119]: ../../api/datar.apis.base/#datar.apis.base.trunc\n[120]: ../../api/datar.apis.base/#datar.apis.base.exp\n[121]: ../../api/datar.apis.base/#datar.apis.base.log\n[122]: ../../api/datar.apis.base/#datar.apis.base.log2\n[123]: ../../api/datar.apis.base/#datar.apis.base.log10\n[124]: ../../api/datar.apis.base/#datar.apis.base.log1p\n[125]: ../../api/datar.apis.base/#datar.apis.base.signif\n[126]: ../../api/datar.apis.base/#datar.apis.base.is_finite\n[127]: ../../api/datar.apis.base/#datar.apis.base.is_infinite\n[128]: ../../api/datar.apis.base/#datar.apis.base.is_nan\n[129]: ../../api/datar.apis.base/#datar.apis.base.match\n[130]: ../../api/datar.apis.base/#datar.apis.base.startswith\n[131]: ../../api/datar.apis.base/#datar.apis.base.endswith\n[132]: ../../api/datar.apis.base/#datar.apis.base.strtoi\n[133]: ../../api/datar.apis.base/#datar.apis.base.chartr\n[134]: ../../api/datar.apis.base/#datar.apis.base.tolower\n[135]: ../../api/datar.apis.base/#datar.apis.base.toupper\n[136]: ../../api/datar.apis.base/#datar.apis.base.max_col\n[137]: ../../api/datar.apis.base/#datar.apis.base.complete_cases\n[138]: ../../api/datar.apis.base/#datar.apis.base.make_names\n[139]: ../../api/datar.apis.base/#datar.apis.base.make_unique\n[140]: ../../api/datar.apis.base/#datar.apis.base.is_ordered\n[141]: ../../api/datar.apis.base/#datar.apis.base.nlevels\n[142]: ../../api/datar.apis.base/#datar.apis.base.ordered\n[143]: ../../api/datar.apis.base/#datar.apis.base.rank\n[144]: ../../api/datar.apis.base/#datar.apis.base.order\n[145]: ../../api/datar.apis.base/#datar.apis.base.sort\n[146]: ../../api/datar.apis.base/#datar.apis.base.tabulate\n[147]: ../../api/datar.apis.base/#datar.apis.base.append\n[148]: ../../api/datar.apis.base/#datar.apis.base.proportions\n[149]: ../../api/datar.apis.base/#datar.apis.base.trimws\n[150]: ../../api/datar.apis.base/#datar.apis.base.as_pd_date\n[151]: ../../notebooks/base-arithmetic\n[152]: ../../api/datar.apis.base/#datar.apis.base.quantile\n[153]: ../../api/datar.apis.base/#datar.apis.base.sd\n[154]: ../../api/datar.apis.base/#datar.apis.base.weighted_mean\n[155]: ../../api/datar.apis.base/#datar.apis.base.col_sums\n[156]: ../../api/datar.apis.base/#datar.apis.base.row_sums\n[157]: ../../api/datar.apis.base/#datar.apis.base.col_means\n[158]: ../../api/datar.apis.base/#datar.apis.base.row_means\n[159]: ../../api/datar.apis.base/#datar.apis.base.col_sds\n[160]: ../../api/datar.apis.base/#datar.apis.base.row_sds\n[161]: ../../api/datar.apis.base/#datar.apis.base.col_medians\n[162]: ../../api/datar.apis.base/#datar.apis.base.row_medians\n[163]: ../../notebooks/base-funs\n[164]: ../../api/datar.apis.base/#datar.apis.base.diff\n[165]: ../../api/datar.apis.base/#datar.apis.base.outer\n[166]: ../../api/datar.apis.base/#datar.apis.base.glimpse\n"
  },
  {
    "path": "docs/reference-maps/datasets.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.data`\n\n|API|Description|Source|\n|---|---|---:|\n|`airlines`|translation between two letter carrier codes and names|[`r-nycflights13`][1]|\n|`airports`|airport names and locations|[`r-nycflights13`][1]|\n|`flights`|all flights that departed from NYC in 2013|[`r-nycflights13`][1]|\n|`weather`|hourly meterological data for each airport|[`r-nycflights13`][1]|\n|`planes`|construction information about each plane|[`r-nycflights13`][1]|\n|#|#|#|\n|`state_abb`|character vector of 2-letter abbreviations for the state names.|[`r-datasets-state`][15]|\n|`state_division`|factor giving state divisions (New England, Middle Atlantic, South Atlantic, East South Central, West South Central, East North Central, West North Central, Mountain, and Pacific).|[`r-datasets-state`][15]|\n|`state_region`|factor giving the region (Northeast, South, North Central, West) that each state belongs to.|[`r-datasets-state`][15]|\n|#|#|#|\n|`airquality`|Daily air quality measurements in New York, May to September 1973.|[`r-datasets-airquality`][2]|\n|`anscombe`|Four x-y datasets which have the same traditional statistical properties|[`r-datasets-anscombe`][3]|\n|`faithful`|Waiting time between eruptions and the duration of the eruption for the Old Faithful geyser in Yellowstone National Park, Wyoming, USA|[`r-datasets-faithful`][31]|\n|`iris`|Edgar Anderson's Iris Data|[`r-datasets-iris`][9]|\n|`mtcars`|Motor Trend Car Road Tests|[`r-datasets-mtcars`][10]|\n|`warpbreaks`|The Number of Breaks in Yarn during Weaving|[`r-datasets-warpbreaks`][19]|\n|`ToothGrowth`|The Effect of Vitamin C on Tooth Growth in Guinea Pigs|[`r-datasets-ToothGrowth`][21]|\n|#|#|#|\n|`band_instruments`|Band members of the Beatles and Rolling Stones|[`r-dplyr-band_members`][4]|\n|`band_instruments2`|Band members of the Beatles and Rolling Stones|[`r-dplyr-band_members`][4]|\n|`band_members`|Band members of the Beatles and Rolling Stones|[`r-dplyr-band_members`][4]|\n|#|#|#|\n|`table1`|Example tabular representations|[`r-dplyr-storms`][17]|\n|`table2`|Example tabular representations|[`r-dplyr-storms`][17]|\n|`table3`|Example tabular representations|[`r-dplyr-storms`][17]|\n|`table4a`|Example tabular representations|[`r-dplyr-storms`][17]|\n|`table4b`|Example tabular representations|[`r-dplyr-storms`][17]|\n|`table5`|Example tabular representations|[`r-dplyr-storms`][17]|\n|#|#|#|\n|`starwars`|Starwars characters (columns `films`, `vehicles` and `starships` are not included)|[`r-dplyr-starwars`][14]|\n|`storms`|This data is a subset of the NOAA Atlantic hurricane database best track data|[`r-dplyr-storms`][16]|\n|`us_rent_income`|US rent and income data|[`r-dplyr-us_rent_income`][18]|\n|`world_bank_pop`|Population data from the world bank|[`r-dplyr-world_bank_pop`][20]|\n|#|#|#|\n|`billboard`|Song rankings for Billboard top 100 in the year 2000|[`r-tidyr-billboard`][5]|\n|`construction`|Completed construction in the US in 2018|[`r-tidyr-construction`][6]|\n|`fish_encounters`|Information about fish swimming down a river|[`r-tidyr-fish_encounters`][8]|\n|`population`|A subset of data from the World Health Organization Global Tuberculosis Report, and accompanying global populations.|[`r-tidyr-who`][11]|\n|`relig_income`|Pew religion and income survey|[`r-tidyr-relig_income`][12]|\n|`smiths`|A small demo dataset describing John and Mary Smith.|[`r-tidyr-smiths`][13]|\n|`who`|A subset of data from the World Health Organization Global Tuberculosis Report, and accompanying global populations.|[`r-tidyr-who`][11]|\n|#|#|#|\n|`diamonds`|A dataset containing the prices and other attributes of almost 54,000 diamonds|[`r-ggplot2-diamonds`][7]|\n|`economics` `economics_long`|US economic time series|[`r-ggplot2-economics`][22]|\n|`faithfuld`|2d density estimate of Old Faithful data|[`r-ggplot2-faithfuld`][23]|\n|`midwest`|Midwest demographics|[`r-ggplot2-midwest`][24]|\n|`mpg`|Fuel economy data from 1999 to 2008 for 38 popular models of cars|[`r-ggplot2-mpg`][25]|\n|`msleep`|An updated and expanded version of the mammals sleep dataset|[`r-ggplot2-msleep`][26]|\n|`presidential`|Terms of 11 presidents from Eisenhower to Obama|[`r-ggplot2-presidential`][27]|\n|`seals`|Vector field of seal movements|[`r-ggplot2-seals`][28]|\n|`txhousing`|Housing sales in TX|[`r-ggplot2-txhousing`][29]|\n|`luv_colours`|`colors()` in Luv space|[`r-ggplot2-luv_colours`][30]|\n|#|#|\n|`gss_cat`|A sample of categorical variables from the General Social survey|[`r-forcats-gss_cat`][32]|\n\n[1]: https://github.com/tidyverse/nycflights13\n[2]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/airquality\n[3]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/anscombe\n[4]: https://dplyr.tidyverse.org/reference/band_members.html\n[5]: https://tidyr.tidyverse.org/reference/billboard.html\n[6]: https://tidyr.tidyverse.org/reference/construction.html\n[7]: https://ggplot2.tidyverse.org/reference/diamonds.html\n[8]: https://tidyr.tidyverse.org/reference/fish_encounters.html\n[9]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/iris\n[10]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/mtcars\n[11]: https://tidyr.tidyverse.org/reference/who.html\n[12]: https://tidyr.tidyverse.org/reference/relig_income.html\n[13]: https://tidyr.tidyverse.org/reference/smiths.html\n[14]: https://dplyr.tidyverse.org/reference/starwars.html\n[15]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/state\n[16]: https://dplyr.tidyverse.org/reference/storms.html\n[17]: https://tidyr.tidyverse.org/reference/table1.html\n[18]: https://tidyr.tidyverse.org/reference/us_rent_income.html\n[19]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/warpbreaks\n[20]: https://tidyr.tidyverse.org/reference/world_bank_pop.html\n[21]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/ToothGrowth\n[22]: https://ggplot2.tidyverse.org/reference/economics.html\n[23]: https://ggplot2.tidyverse.org/reference/faithfuld.html\n[24]: https://ggplot2.tidyverse.org/reference/midwest.html\n[25]: https://ggplot2.tidyverse.org/reference/mpg.html\n[26]: https://ggplot2.tidyverse.org/reference/msleep.html\n[27]: https://ggplot2.tidyverse.org/reference/presidential.html\n[28]: https://ggplot2.tidyverse.org/reference/seals.html\n[29]: https://ggplot2.tidyverse.org/reference/txhousing.html\n[30]: https://ggplot2.tidyverse.org/reference/luv_colours.html\n[31]: https://www.rdocumentation.org/packages/datasets/versions/3.6.2/topics/faithfulZZ\n[32]: https://forcats.tidyverse.org/reference/gss_cat.html\n"
  },
  {
    "path": "docs/reference-maps/dplyr.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.dplyr`\n\nReference map of `r-tidyverse-dplyr` can be found [here][1].\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### One table verbs\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[arrange()][2]|Arrange rows by column values| [:material-notebook:][3] |\n|[count()][4] [tally()][5] [add_count()][6] [add_tally()][7]|Count observations by group| [:material-notebook:][8] |\n|[distinct()][9]|Subset distinct/unique rows| [:material-notebook:][10] |\n|[filter()][11]|Subset rows using column values| [:material-notebook:][12] |\n|[mutate()][13] [transmute()][14]|Create, modify, and delete columns| [:material-notebook:][15] |\n|[pull()][16]|Extract a single column| [:material-notebook:][17] |\n|[reframe()][142]|Reframe a data frame| [:material-notebook:][142] |\n|[relocate()][18]|Change column order| [:material-notebook:][19] |\n|[rename()][20] [rename_with()][21]|Rename columns| [:material-notebook:][22] |\n|[select()][23]|\tSubset columns using their names and types| [:material-notebook:][24] |\n|[summarise() summarize()][25]| Summarise each group to fewer rows| [:material-notebook:][26] |\n|[slice()][27] [slice_head()][28] [slice_tail()][29] [slice_min()][30] [slice_max()][31] [slice_sample()][32]| Subset rows using their positions| [:material-notebook:][33] |\n\n### Two table verbs\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[bind_rows()][34] [bind_cols()][35]|Efficiently bind multiple data frames by row and column|[:material-notebook:][36]|\n|[intersect()][37] [setdiff()][38] [setequal()][39] [union()][40]|Set operations on data frame|[:material-notebook:][41]|\n|[all_of()][42] [any_of()][43] [contains()][44] [ends_with()][45] [everything()][46] [last_col()][47] [matches()][48] [num_range()][49] [one_of()][50] [starts_with()][51]|Select variables from character vectors|[:material-notebook:][52]|\n|[union_all()][53]|Set operations|[:material-notebook:][54]|\n|[inner_join()][55] [left_join()][56] [right_join()][57] [full_join()][58]|Mutating joins|[:material-notebook:][59]|\n|[nest_join()][60]|Nest join|[:material-notebook:][61]|\n|[semi_join()][62] [anti_join()][63]|Filtering joins|[:material-notebook:][64]|\n\n### Grouping\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[group_by()][65] [ungroup()][66]|Group by one or more variables|[:material-notebook:][67]|\n|[group_cols() group_vars()][68]|Select grouping variables|[:material-notebook:][69]|\n|[rowwise()][70]|Group input by rows|[:material-notebook:][71]|\n\n### Vector functions\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[across()][72] [if_any()][73] [if_all()][74]|Apply a function (or functions) across multiple columns|[:material-notebook:][75]|\n|[c_across()][76]|Combine values from multiple columns|[:material-notebook:][77]|\n|[between()][78]|Do values in a numeric vector fall in specified range?|[:material-notebook:][79]|\n|[case_when()][80]|A general vectorised if|[:material-notebook:][81]|\n|[coalesce()][82]|Find first non-missing element|[:material-notebook:][83]|\n|[cumall()][84] [cumany()][85] [cummean()][86]|Cumulativate versions of any, all, and mean|[:material-notebook:][87]|\n|[desc()][88]|Descending order|[:material-notebook:][89]|\n|[if_else()][90]|Vectorised if|[:material-notebook:][91]|\n|[lag()][92] [lead()][93]|Compute lagged or leading values|[:material-notebook:][94]|\n|[order_by()][95]|A helper function for ordering window function output|[:material-notebook:][96]|\n|[n()][97] [cur_data()][98] [cur_data_all()][99] [cur_group()][100] [cur_group_id()][101] [cur_group_rows()][102] [cur_column()][103]|Context dependent expressions|[:material-notebook:][104]|\n|[n_distinct()][105]|Efficiently count the number of unique values in a set of vectors|[:material-notebook:][106]|\n|[na_if()][107]|Convert values to NA|[:material-notebook:][108]|\n|[near()][109]|Compare two numeric vectors|[:material-notebook:][110]|\n|[nth()][111] [first()][112] [last()][113]|Extract the first, last or nth value from a vector|[:material-notebook:][114]|\n|[row_number()][115] [ntile()][116] [min_rank()][117] [dense_rank()][118] [percent_rank()][119] [cume_dist()][120]|Windowed rank functions.|[:material-notebook:][121]|\n|[recode()][122] [recode_factor()][123]|Recode values|[:material-notebook:][124]|\n\n### Data\n\nSee [datasets][125]\n\n### <s>Remote tables</s>\n\n### Experimental\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[group_map()][126] [group_modify()][127] [group_walk()][128]|Apply a function to each group|[:material-notebook:][129]|\n|[group_trim()][130]|Trim grouping structure|[:material-notebook:][131]|\n|[group_split()][132]|Split data frame by groups|[:material-notebook:][133]|\n|[with_groups()][134]|Perform an operation with temporary groups|[:material-notebook:][135]|\n|[rows_insert()][136] [rows_update()][137] [rows_patch()][138] [rows_upsert()][139] [rows_delete()][140]|Manipulate individual rows|[:material-notebook:][141]|\n\n### <s>Questioning</s>\n\n### <s>Superseded</s>\n\n\n[1]: https://dplyr.tidyverse.org/reference/index.html\n[2]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.arrange\n[3]: ../../notebooks/arrange\n[4]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.count\n[5]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.tally\n[6]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.add_count\n[7]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.add_tally\n[8]: ../../notebooks/count\n[9]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.distinct\n[10]: ../../notebooks/distinct\n[11]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.filter\n[12]: ../../notebooks/filter\n[13]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.mutate\n[14]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.transmutate\n[15]: ../../notebooks/mutate\n[16]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.pull\n[17]: ../../notebooks/pull\n[18]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.relocate\n[19]: ../../notebooks/relocate\n[20]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rename\n[21]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rename_with\n[22]: ../../notebooks/rename\n[23]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.select\n[24]: ../../notebooks/select\n[25]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.summarise\n[26]: ../../notebooks/summarise\n[27]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice\n[28]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice_head\n[29]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice_tail\n[30]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice_min\n[31]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice_max\n[32]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.slice_sample\n[33]: ../../notebooks/slice\n[34]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.bind_rows\n[35]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.bind_cols\n[36]: ../../notebooks/bind\n[37]: ../../api/datar.base.verbs/#datar.base.verbs.intersect\n[38]: ../../api/datar.base.verbs/#datar.base.verbs.setdiff\n[39]: ../../api/datar.base.verbs/#datar.base.verbs.seqequal\n[40]: ../../api/datar.base.verbs/#datar.base.verbs.union\n[41]: ../../notebooks/setops\n[42]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.all_of\n[43]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.any_of\n[44]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.contains\n[45]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.ends_with\n[46]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.everything\n[47]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.last_col\n[48]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.matches\n[49]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.num_range\n[50]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.one_of\n[51]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.starts_with\n[52]: ../../notebooks/select\n[53]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.union_all\n[54]: ../../notebooks/select\n[55]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.inner_join\n[56]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.left_join\n[57]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.right_join\n[58]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.full_join\n[59]: ../../notebooks/mutate-joins\n[60]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.nest_join\n[61]: ../../notebooks/nest-join\n[62]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.semi_join\n[63]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.anti_join\n[64]: ../../notebooks/filter-joins\n[65]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_by\n[66]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.ungroup\n[67]: ../../notebooks/group_by\n[68]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_vars\n[69]: ../../notebooks/group_by\n[70]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rowwise\n[71]: ../../notebooks/rowwise\n[72]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.across\n[73]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.if_any\n[74]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.if_all\n[75]: ../../notebooks/across\n[76]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.c_across\n[77]: ../../notebooks/across\n[78]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.between\n[79]: ../../notebooks/between\n[80]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.case_when\n[81]: ../../notebooks/case_when\n[82]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.coalesce\n[83]: ../../notebooks/coalesce\n[84]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cumall\n[85]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cumany\n[86]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cummean\n[87]: ../../notebooks/cumall\n[88]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.desc\n[89]: ../../notebooks/desc\n[90]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.if_else\n[91]: ../../notebooks/case_when\n[92]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.lag\n[93]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.lead\n[94]: ../../notebooks/lead-lag\n[95]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.order_by\n[96]: ../../notebooks/lead-lag\n[97]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.n\n[98]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_data\n[99]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_data_all\n[100]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_group\n[101]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_group_id\n[102]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_group_rows\n[103]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cur_column\n[104]: ../../notebooks/context\n[105]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.n_distinct\n[106]: ../../notebooks/distinct\n[107]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.na_if\n[108]: ../../notebooks/na_if\n[109]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.near\n[110]: ../../notebooks/near\n[111]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.nth\n[112]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.first\n[113]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.last\n[114]: ../../notebooks/nth\n[115]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.row_number\n[116]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.ntile\n[117]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.min_rank\n[118]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.dense_rank\n[119]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.percent_rank\n[120]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.cume_dist\n[121]: ../../notebooks/ranking\n[122]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.recode\n[123]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.recode_factor\n[124]: ../../notebooks/recode\n[125]: ../datasets\n[126]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_map\n[127]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_modify\n[128]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_walk\n[129]: ../../notebooks/group_map\n[130]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_trim\n[131]: ../../notebooks/group_trim\n[132]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.group_split\n[133]: ../../notebooks/group_split\n[134]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.with_groups\n[135]: ../../notebooks/with_groups\n[136]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rows_insert\n[137]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rows_update\n[138]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rows_patch\n[139]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rows_upsert\n[140]: ../../api/datar.apis.dplyr/#datar.apis.dplyr.rows_delete\n[141]: ../../notebooks/rows\n[142]: ../../notebooks/reframe\n"
  },
  {
    "path": "docs/reference-maps/forcats.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.forcats`\n\nReference map of `r-tidyverse-forcats` can be found [here][1].\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Change order of levels\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[fct_relevel()][2]|Reorder factor levels by hand|[:material-notebook:][3]|\n|[fct_inorder()][4] [fct_infreq()][5] [fct_inseq()][6]|Reorder factor levels by first appearance, frequency, or numeric order|[:material-notebook:][3]|\n|[fct_reorder()][7] [fct_reorder2()][8] [last2()][9] [first2()][10]|Reorder factor levels by sorting along another variable|[:material-notebook:][3]|\n|[fct_shuffle()][11]|Randomly permute factor levels|[:material-notebook:][3]|\n|[fct_rev()][12]|Reverse order of factor levels|[:material-notebook:][3]|\n|[fct_shift()][13]|Shift factor levels to left or right, wrapping around at end|[:material-notebook:][3]|\n\n### Change value of levels\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[fct_anon()][15]|Anonymise factor levels|[:material-notebook:][14]|\n|[fct_collapse()][16]|Collapse factor levels into manually defined groups|[:material-notebook:][14]|\n|[fct_lump()][17] [fct_lump_min()][18] [fct_lump_prop()][19] [fct_lump_n()][20] [fct_lump_lowfreq()][41]|Lump together actor levels into \"other\"|[:material-notebook:][14]|\n|[fct_other()][21]|Replace levels with \"other\"|[:material-notebook:][14]|\n|[fct_recode()][22]|Change factor levels by hand|[:material-notebook:][14]|\n|[fct_relabel()][23]|Automatically relabel factor levels, collapse as necessary|[:material-notebook:][14]|\n\n### Add/remove levels\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[fct_expand()][25]|Add additional levels to a factor|[:material-notebook:][24]|\n|[fct_explicit_na()][26]|Make missing values explicit||[:material-notebook:][24]|\n|[fct_drop()][27]|Drop unused levels||[:material-notebook:][24]|\n|[fct_unify()][28]|Unify the levels in a list of factors||[:material-notebook:][24]|\n\n### Combine multiple factors\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[fct_c()][29]|Concatenate factors, combining levels|[:material-notebook:][31]|\n|[fct_cross()][30]|Combine levels from two or more factors to create a new factor|[:material-notebook:][31]|\n\n### Other helpers\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[as_factor()][33]|Convert input to a factor|[:material-notebook:][32]|\n|[fct_count()][34]|Count entries in a factor|[:material-notebook:][32]|\n|[fct_match()][35]|Test for presence of levels in a factor|[:material-notebook:][32]|\n|[fct_unique()][36]|Unique values of a factor|[:material-notebook:][32]|\n|[lvls_reorder()][37] [lvls_revalue()][38] [lvls_expand()][39]|Low-level functions for manipulating levels|[:material-notebook:][32]|\n|[lvls_union()][40]|Find all levels in a list of factors|[:material-notebook:][32]|\n\n[1]: https://forcats.tidyverse.org/reference/index.html\n[2]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_relevel\n[3]: ../../notebooks/forcats_lvl_order\n[4]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_inorder\n[5]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_infreq\n[6]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_inseq\n[7]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_reorder\n[8]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_reorder2\n[9]: ../../api/datar.apis.forcats/#datar.apis.forcats.last2\n[10]: ../../api/datar.apis.forcats/#datar.apis.forcats.first2\n[11]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_shuffle\n[12]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_rev\n[13]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_shift\n[14]: ../../notebooks/forcats_lvl_value\n[15]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_relevel\n[16]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_relevel\n[17]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_lump\n[18]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_lump_min\n[19]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_lump_prop\n[20]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_lump_n\n[21]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_other\n[22]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_recode\n[23]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_relabel\n[24]: ../../notebooks/forcats_lvl_addrm\n[25]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_expand\n[26]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_explicit_na\n[27]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_drop\n[28]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_unify\n[29]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_c\n[30]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_cross\n[31]: ../../notebooks/forcats_fct_multi\n[32]: ../../notebooks/forcats_misc\n[33]: ../../api/datar.apis.forcats/#datar.apis.forcats.as_factor\n[34]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_count\n[35]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_match\n[36]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_unique\n[37]: ../../api/datar.apis.forcats/#datar.apis.forcats.lvls_reorder\n[38]: ../../api/datar.apis.forcats/#datar.apis.forcats.lvls_revalue\n[39]: ../../api/datar.apis.forcats/#datar.apis.forcats.lvls_expand\n[40]: ../../api/datar.apis.forcats/#datar.apis.forcats.lvls_union\n[41]: ../../api/datar.apis.forcats/#datar.apis.forcats.fct_lump_lowfreq\n"
  },
  {
    "path": "docs/reference-maps/other.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.datar`\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Verbs\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[**`get()`**][2]|Extract values from data frames|[:material-notebook:][1]|\n|[**`flatten()`**][2]|Flatten values of data frames|[:material-notebook:][1]|\n|[**`pipe()`**][9]|Apply a function to data in a piping workflow|[:material-notebook:][1]|\n\n### Functions\n\n|[**`itemgetter()`**][3]|Turn `a[f.x]` to a valid verb argument with `itemgetter(a, f.x)`|[:material-notebook:][1]|\n|[**`attrgetter()`**][4]|`f.x.<attr>` but works with `SeriesGroupBy` object|[:material-notebook:][1]|\n|[**`pd_str()`**][4]|`str` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]|\n|[**`pd_cat()`**][4]|`cat` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]|\n|[**`pd_dt()`**][4]|`dt` accessor but works with `SeriesGroupBy` object|[:material-notebook:][1]|\n\n\n[1]: ../../notebooks/datar\n[2]: ../../api/datar.apis.datar/#datar.apis.datar.get\n[3]: ../../api/datar.apis.datar/#datar.apis.datar.flatten\n[4]: ../../api/datar.apis.datar/#datar.apis.datar.itemgetter\n[5]: ../../api/datar.apis.datar/#datar.apis.datar.attrgetter\n[6]: ../../api/datar.apis.datar/#datar.apis.datar.pd_str\n[7]: ../../api/datar.apis.datar/#datar.apis.datar.pd_cat\n[8]: ../../api/datar.apis.datar/#datar.apis.datar.pd_dt\n[9]: ../../api/datar.misc/#datar.misc.pipe\n"
  },
  {
    "path": "docs/reference-maps/stats.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.datar`\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Stats\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`rnorm()`][1]|Generates random deviates for the normal distribution||\n|[`rpois()`][2]|Generates random deviates for the Poisson distribution||\n|[`runif()`][3]|Generates random deviates for the uniform distribution||\n\n\n[1]: ../../api/datar.apis.base/#datar.apis.base.rnorm\n[2]: ../../api/datar.apis.base/#datar.apis.base.rpois\n[3]: ../../api/datar.apis.base/#datar.apis.base.runif\n"
  },
  {
    "path": "docs/reference-maps/tibble.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.tibble`\n\nReference map of `r-tidyverse-tibble` can be found [here][1].\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|_italic_|Working in process|\n\n\n### Tibbles\n\n!!! Tip\n\n    Tibbles in `datar` are just `pandas.DataFrame`s. So there is no difference between data frames created by `tibble()` and `pandas.DataFrame`, unlike in R, `tibble` and `data.frame`.\n\n    Also note that tibbles in `datar` are not `rownames`/`index` aware for most APIs, just like most `tidyverse` APIs.\n\n|API|Description|Notebook example|\n|---|---|---:|\n|<s>`tibble-package`</s>|||\n|[`tibble()`][12] [`tibble_row()`][18]|Build a data frame| [:material-notebook:][2] |\n|[`fibble()`][13]|Same as `tibble()` but used as Verb arguments| [:material-notebook:][2] |\n|<s>`tbl_df-class`</s>|||\n|<s>`print(<tbl_df>)`</s> <s>`format(<tbl_df>)`</s>|||\n|[`tribble()`][3]|Row-wise tibble creation|[:material-notebook:][2]|\n\n### Coercion\n\n|API|Description|Notebook example|\n|---|---|---:|\n|<s>`is_tibble()`</s>|||\n|[`as_tibble()`][19]|Convert data frames into datar's tibbles||\n|<s>`new_tibble()`</s> <s>`validate_tibble()`</s>|||\n|[`enframe()`][4] [`deframe()`][14]|Converting iterables to data frames, and vice versa| [:material-notebook:][5]|\n\n### Manipulation\n\n|API|Description|Notebook example|\n|---|---|---:|\n|<s>`$` `[[` `[`</s>|Please subset data frames using `pandas` syntax (`df.col`, `df['col']`, `df.loc[...]` or `df.iloc[...]`|\n|[`add_row()`][6]| Add rows to a data frame | [:material-notebook:][7] |\n|[`add_column()`][8]| Add columns to a data frame | [:material-notebook:][9] |\n\n### Helpers\n\n|API|Description|Notebook example|\n|---|---|---:|\n|<s>`reexports`</s>|||\n|[`has_rownames()`/`has_index()`][10] [`remove_rownames()`/`remove_index()`/`drop_index()`][15] [`rownames_to_column()`/`index_to_column()`][16] [`rowid_to_column()` `column_to_rownames()`/`column_to_index()`][17]|Tools for working with row names/DataFrame indexes|[:material-notebook:][11]|\n|<s>`view()`</s>|||\n\n### <s>Vectors, matrices, and lists</s>\n\n\n[1]: https://tibble.tidyverse.org/reference/index.html\n[2]: ../../notebooks/tibble\n[3]: ../../api/datar.apis.tibble/#datar.apis.tibble.tribble\n[4]: ../../api/datar.apis.tibble/#datar.apis.tibble.enframe\n[5]: ../../notebooks/enframe\n[6]: ../../api/datar.apis.tibble/#datar.apis.tibble.add_row\n[7]: ../../notebooks/add_row\n[8]: ../../api/datar.apis.tibble/#datar.apis.tibble.add_column\n[9]: ../../notebooks/add_column\n[10]: ../../api/datar.apis.tibble/#datar.apis.tibble.has_rownames\n[11]: ../../notebooks/rownames\n[12]: ../../api/datar.apis.tibble/#datar.apis.tibble.tibble\n[13]: ../../api/datar.apis.tibble/#datar.apis.tibble.fibble\n[14]: ../../api/datar.apis.tibble/#datar.apis.tibble.deframe\n[15]: ../../api/datar.apis.tibble/#datar.apis.tibble.remove_rownames\n[16]: ../../api/datar.apis.tibble/#datar.apis.tibble.rownames_to_column\n[17]: ../../api/datar.apis.tibble/#datar.apis.tibble.rowid_to_column\n[18]: ../../api/datar.apis.tibble/#datar.apis.tibble.tibble_row\n[19]: ../../api/datar.apis.tibble/#datar.apis.tibble.as_tibble\n"
  },
  {
    "path": "docs/reference-maps/tidyr.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.dplyr`\n\nReference map of `r-tidyverse-tidyr` can be found [here][1].\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Pivoting\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[pivot_longer()][26]|Pivot data from wide to long|[:material-notebook:][27]|\n|[pivot_wider()][28]|Pivot data from long to wide|[:material-notebook:][29]|\n\n### Rectangling\n\n|API|Description|Notebook example|\n|---|---|---:|\n|_`hoist()`_ _`unnest_longer()`_ _`unnest_wider()`_ _`unnest_auto()`_|Rectangle a nested list into a tidy tibble||\n\n### Nesting\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`nest()`][9] [`unnest()`][10]|Nest and unnest|[:material-notebook:][11]|\n\n### Character vectors\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`extract()`][22]|Extract a character column into multiple columns using regular expression groups|[:material-notebook:][23]|\n|[`separate()`][30]|Separate a character column into multiple columns with a regular expression or numeric locations|[:material-notebook:][31]|\n|[`separate_rows()`][34]|Separate a collapsed column into multiple rows|[:material-notebook:][35]|\n|[`unite()`][36]|Unite multiple columns into one by pasting strings together|[:material-notebook:][37]|\n\n### Missing values\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`complete()`][18]|Complete a data frame with missing combinations of data|[:material-notebook:][19]|\n|[`drop_na()`][20]|Drop rows containing missing values|[:material-notebook:][21]|\n|[`expand()`][12] [`crossing()`][13] [`nesting()`][14]|Expand data frame to include all possible combinations of values|[:material-notebook:][15]|\n|[`expand_grid()`][16]|\n|[`fill()`][24]|Fill in missing values with previous or next value|[:material-notebook:][25]|\n|[`full_seq()`][40]|Create the full sequence of values in a vector|[:material-notebook:][41]|\n|[`replace_na()`][38]|Replace NAs with specified values|[:material-notebook:][39]|\n\n### Miscellanea\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`chop()`][3] [`unchop()`][4]|Chop and unchop|[:material-notebook:][5]|\n|[`pack()`][6] [`unpack()`][7]|Pack and unpack|[:material-notebook:][8]|\n|[`uncount()`][32]|\"Uncount\" a data frame|[:material-notebook:][33]|\n\n### Data\n\nSee [datasets][2]\n\n[1]: https://tidyr.tidyverse.org/reference/index.html\n[2]: ../datasets\n[3]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.chop\n[4]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.unchop\n[5]: ../../notebooks/chop\n[6]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.pack\n[7]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.unpack\n[8]: ../../notebooks/chop\n[9]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.nest\n[10]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.unnest\n[11]: ../../notebooks/nest\n[12]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.expand\n[13]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.crossing\n[14]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.nesting\n[15]: ../../notebooks/expand\n[16]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.expand_grid\n[17]: ../../notebooks/expand_grid\n[18]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.complete\n[19]: ../../notebooks/complete\n[20]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.drop_na\n[21]: ../../notebooks/drop_na\n[22]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.extract\n[23]: ../../notebooks/extract\n[24]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.fill\n[25]: ../../notebooks/fill\n[26]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.pivot_longer\n[27]: ../../notebooks/pivot_longer\n[28]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.pivot_wider\n[29]: ../../notebooks/pivot_wider\n[30]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.separate\n[31]: ../../notebooks/separate\n[32]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.uncount\n[33]: ../../notebooks/uncount\n[34]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.separate_rows\n[35]: ../../notebooks/separate\n[36]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.unite\n[37]: ../../notebooks/unite\n[38]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.replace_na\n[39]: ../../notebooks/replace_na\n[40]: ../../api/datar.apis.tidyr/#datar.apis.tidyr.full_seq\n[41]: ../../notebooks/full_seq\n"
  },
  {
    "path": "docs/reference-maps/utils.md",
    "content": "<style>\n.md-typeset__table {\n   min-width: 100%;\n}\n\n.md-typeset table:not([class]) {\n    display: table;\n    max-width: 80%;\n}\n</style>\n\n## Reference of `datar.datar`\n\n<u>**Legend:**</u>\n\n|Sample|Status|\n|---|---|\n|[normal]()|API that is regularly ported|\n|<s>[strike-through]()</s>|API that is not ported, or not an API originally|\n|[**bold**]()|API that is unique in `datar`|\n|[_italic_]()|Working in process|\n\n### Utils\n\n|API|Description|Notebook example|\n|---|---|---:|\n|[`head()`][1]|Get the head of the object||\n|[`tail()`][2]|Get the tail of the object||\n\n[1]: ../../api/datar.apis.base/#datar.apis.base.head\n[2]: ../../api/datar.apis.base/#datar.apis.base.tail\n"
  },
  {
    "path": "docs/style.css",
    "content": "\n.md-main__inner.md-grid {\n    max-width: 80%;\n    margin-left: 32px;\n}\n\n.md-typeset .admonition, .md-typeset details {\n    font-size: .7rem !important;\n}\n\n.md-typeset table:not([class]) td {\n    padding: .55em 1.25em !important;\n}\n\n.md-typeset table:not([class]) th {\n    padding: .75em 1.25em !important;\n}\n\n.md-grid {\n    max-width: none;\n}\n\n.mkapi-docstring{\n    line-height: 1;\n}\n.mkapi-node {\n    background-color: #f4faff;\n    border-top: 3px solid #151922;\n}\n.mkapi-node .mkapi-object-container {\n    background-color: #d1d4d6;\n    padding: .12em .4em;\n}\n.mkapi-node .mkapi-object-container .mkapi-object.code {\n    background: none;\n    border: none;\n}\n.mkapi-node .mkapi-object-container .mkapi-object.code * {\n    font-size: .65rem !important;\n}\n.mkapi-node pre {\n    line-height: 1.5;\n}\n.md-typeset pre>code {\n    overflow: visible;\n    line-height: 1.2;\n}\n.mkapi-docstring .md-typeset pre>code {\n    font-size: 0.1rem !important;\n}\n.mkapi-section-name.bases {\n    margin-top: .2em;\n}\n.mkapi-section-body.bases {\n    padding-bottom: .7em;\n    line-height: 1.3;\n}\n.mkapi-section.bases {\n    margin-bottom: .8em;\n}\n.mkapi-node * {\n    font-size: .7rem;\n}\n.mkapi-node a.mkapi-src-link {\n    word-break: keep-all;\n}\n.mkapi-docstring {\n    padding: .4em .15em !important;\n}\n.mkapi-section-name-body {\n    font-size: .72rem !important;\n}\n.mkapi-node ul.mkapi-items li {\n    line-height: 1.4 !important;\n}\n.mkapi-node ul.mkapi-items li * {\n    font-size: .65rem !important;\n}\n.mkapi-node code.mkapi-object-signature {\n    padding-right: 2px;\n}\n.mkapi-node .mkapi-code * {\n    font-size: .6rem;\n}\n.mkapi-node a.mkapi-docs-link {\n    font-size: .6rem;\n}\n.mkapi-node h1.mkapi-object.mkapi-object-code {\n    margin: .2em .3em;\n}\n.mkapi-node h1.mkapi-object.mkapi-object-code .mkapi-object-kind.mkapi-object-kind-code {\n    font-style: normal;\n    margin-right: 16px;\n}\n.mkapi-node .mkapi-item-name {\n    font-size: .7rem !important;\n    color: #555;\n    padding-right: 4px;\n}\n.md-typeset {\n    font-size: .75rem !important;\n    line-height: 1.5 !important;\n}\n.mkapi-object-kind.package.top {\n    font-size: .8rem !important;\n    color: #111;\n\n}\n.mkapi-object.package.top > h2 {\n    font-size: .8rem !important;\n}\n\n.mkapi-object-body.package.top * {\n    font-size: .75rem !important;\n}\n.mkapi-object-kind.module.top {\n    font-size: .75rem !important;\n    color: #222;\n}\n\n.mkapi-object-body.module.top * {\n    font-size: .75rem !important;\n}\n\n.mkapi-section-body.examples pre code {\n    font-size: .65rem !important;\n    overflow: auto;\n}\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "site_name: datar\nrepo_url: https://github.com/pwwang/datar\nrepo_name: pwwang/datar\ntheme:\n    favicon: favicon.png\n    logo: favicon.png\n    icon:\n        repo: fontawesome/brands/github\n    palette:\n        primary: black\n    name: 'material'\n    font:\n      text:\n        - FreightSans\n        - \"Helvetica Neue\"\n        - Helvetica\n        - Arial\n        - sans-serif\n      code:\n        - IBMPlexMono\n        - SFMono-Regular\n        - Menlo\n        - Monaco\n        - Consolas\n        - \"Liberation Mono\"\n        - \"Courier New\"\n        - monospace\n    features:\n        - navigation.top\nmarkdown_extensions:\n    - markdown.extensions.admonition\n    - pymdownx.emoji:\n        emoji_index: !!python/name:material.extensions.emoji.twemoji\n        emoji_generator: !!python/name:material.extensions.emoji.to_svg\n    - pymdownx.superfences:\n        preserve_tabs: true\n    - toc:\n        baselevel: 2\nplugins:\n    - search # necessary for search to work\n    - mkapi\n    - mkdocs-jupyter:\n        execute: false\nextra_css:\n    - style.css\nnav:\n    - 'Home': 'index.md'\n    - 'Reference maps':\n        - 'reference-maps/ALL.md'\n        - 'reference-maps/base.md'\n        - 'reference-maps/dplyr.md'\n        - 'reference-maps/tibble.md'\n        - 'reference-maps/tidyr.md'\n        - 'reference-maps/forcats.md'\n        - 'reference-maps/datasets.md'\n        - 'reference-maps/other.md'\n    - 'Import datar': 'import.md'\n    - 'Backends': 'backends.md'\n    - 'Options': 'options.md'\n    - 'Environment Variables': 'ENV_VARS.md'\n    - 'The f-expression': 'f.md'\n    - 'Data': 'data.md'\n    - 'Examples':\n        - 'across': 'notebooks/across.ipynb'\n        - 'add_column': 'notebooks/add_column.ipynb'\n        - 'add_row': 'notebooks/add_row.ipynb'\n        - 'arrange': 'notebooks/arrange.ipynb'\n        - 'base': 'notebooks/base.ipynb'\n        - 'base-arithmetic': 'notebooks/base-arithmetic.ipynb'\n        - 'base-funs': 'notebooks/base-funs.ipynb'\n        - 'between': 'notebooks/between.ipynb'\n        - 'bind': 'notebooks/bind.ipynb'\n        - 'case_when': 'notebooks/case_when.ipynb'\n        - 'chop': 'notebooks/chop.ipynb'\n        - 'coalesce': 'notebooks/coalesce.ipynb'\n        - 'complete': 'notebooks/complete.ipynb'\n        - 'context': 'notebooks/context.ipynb'\n        - 'count': 'notebooks/count.ipynb'\n        - 'cumall': 'notebooks/cumall.ipynb'\n        - 'desc': 'notebooks/desc.ipynb'\n        - 'distinct': 'notebooks/distinct.ipynb'\n        - 'drop_na': 'notebooks/drop_na.ipynb'\n        - 'enframe': 'notebooks/enframe.ipynb'\n        - 'expand': 'notebooks/expand.ipynb'\n        - 'expand_grid': 'notebooks/expand_grid.ipynb'\n        - 'extract': 'notebooks/extract.ipynb'\n        - 'fill': 'notebooks/fill.ipynb'\n        - 'filter': 'notebooks/filter.ipynb'\n        - 'filter-joins': 'notebooks/filter-joins.ipynb'\n        - 'forcats_fct_multi': 'notebooks/forcats_fct_multi.ipynb'\n        - 'forcats_lvl_addrm': 'notebooks/forcats_lvl_addrm.ipynb'\n        - 'forcats_lvl_order': 'notebooks/forcats_lvl_order.ipynb'\n        - 'forcats_lvl_value': 'notebooks/forcats_lvl_value.ipynb'\n        - 'forcats_misc': 'notebooks/forcats_misc.ipynb'\n        - 'full_seq': 'notebooks/full_seq.ipynb'\n        - 'other': 'notebooks/other.ipynb'\n        - 'group_by': 'notebooks/group_by.ipynb'\n        - 'group_map': 'notebooks/group_map.ipynb'\n        - 'group_split': 'notebooks/group_split.ipynb'\n        - 'group_trim': 'notebooks/group_trim.ipynb'\n        - 'lead-lag': 'notebooks/lead-lag.ipynb'\n        - 'mutate-joins': 'notebooks/mutate-joins.ipynb'\n        - 'mutate': 'notebooks/mutate.ipynb'\n        - 'n_distinct': 'notebooks/n_distinct.ipynb'\n        - 'na_if': 'notebooks/na_if.ipynb'\n        - 'near': 'notebooks/near.ipynb'\n        - 'nest': 'notebooks/nest.ipynb'\n        - 'nest-join': 'notebooks/nest-join.ipynb'\n        - 'nth': 'notebooks/nth.ipynb'\n        - 'pack': 'notebooks/pack.ipynb'\n        - 'pivot_longer': 'notebooks/pivot_longer.ipynb'\n        - 'pivot_wider': 'notebooks/pivot_wider.ipynb'\n        - 'pull': 'notebooks/pull.ipynb'\n        - 'ranking': 'notebooks/ranking.ipynb'\n        - 'readme': 'notebooks/readme.ipynb'\n        - 'recode': 'notebooks/recode.ipynb'\n        - 'reframe': 'notebooks/reframe.ipynb'\n        - 'relocate': 'notebooks/relocate.ipynb'\n        - 'rename': 'notebooks/rename.ipynb'\n        - 'replace_na': 'notebooks/replace_na.ipynb'\n        - 'rownames': 'notebooks/rownames.ipynb'\n        - 'rows': 'notebooks/rows.ipynb'\n        - 'rowwise': 'notebooks/rowwise.ipynb'\n        - 'select': 'notebooks/select.ipynb'\n        - 'separate': 'notebooks/separate.ipynb'\n        - 'setops': 'notebooks/setops.ipynb'\n        - 'slice': 'notebooks/slice.ipynb'\n        - 'summarise': 'notebooks/summarise.ipynb'\n        - 'tibble': 'notebooks/tibble.ipynb'\n        - 'uncount': 'notebooks/uncount.ipynb'\n        - 'unite': 'notebooks/unite.ipynb'\n        - 'with_groups': 'notebooks/with_groups.ipynb'\n    - 'API': 'mkapi/api/datar'\n    - 'Change Log': CHANGELOG.md\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[project]\nname = \"datar\"\nversion = \"0.15.17\"\ndescription = \"A Grammar of Data Manipulation in python\"\nauthors = [\n    {name = \"pwwang\", email = \"pwwang@pwwang.com\"}\n]\nlicense = {text = \"MIT\"}\nreadme = \"README.md\"\nrequires-python = \">=3.9\"\ndependencies = [\n    \"simplug>=0.5,<0.6\",\n    \"pipda>=0.13.1,<0.14\",\n    \"python-simpleconf[toml]>=0.9,<0.10\",\n]\n\n[project.optional-dependencies]\nnumpy = [\"datar-numpy>=0.3.4,<0.4\"]\npandas = [\"datar-pandas>=0.7,<0.8\"]\n# pandas = {path = \"../datar-pandas\"}\n# polars = [\"datar-polars\"]\narrow = [\"datar-arrow>=0.2,<0.3\"]\n# modin = [\"datar-pandas>=0.6,<0.7\"]\n\n[project.urls]\nHomepage = \"https://github.com/pwwang/datar\"\nRepository = \"https://github.com/pwwang/datar\"\n\n[dependency-groups]\ndev = [\n    \"pytest>=8.1,<9\",\n    \"pytest-cov>=6,<7\",\n    \"flake8\",\n    \"six>=1.16,<2\",\n    \"numpy\",\n    \"python-slugify>=8,<9\",\n]\ndocs = [\n    \"mkdocs>=1.6,<2\",\n    \"mkdocs-material>=9.6,<10\",\n    \"pymdown-extensions>=10.14,<11\",\n    \"mkapi-fix>=0.1,<0.2\",\n    \"mkdocs-jupyter>=0.25,<0.26\",\n    \"ipykernel>=6.29,<7\",\n    \"ipython-genutils>=0.2,<0.3\",\n    \"plotnine>=0.13,<0.14\",\n    \"klib>=1.3,<2\",\n    \"pardoc>=0.2,<0.3\",\n    \"varname>=0.15,<0.16\",\n]\n\n[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[tool.mypy]\nignore_missing_imports = true\nallow_redefinition = true\ndisable_error_code = [\"attr-defined\", \"no-redef\", \"union-attr\"]\nshow_error_codes = true\nstrict_optional = false\n\n[tool.pytest.ini_options]\naddopts = \"-vv -p no:asyncio --tb=short --cov-config=.coveragerc --cov=datar --cov-report xml:cov.xml --cov-report term-missing\"\nfilterwarnings = [\n    # \"error\"\n]\nconsole_output_style = \"progress\"\njunit_family = \"xunit1\"\n\n[tool.black]\nline-length = 80\ntarget-version = ['py39', 'py310', 'py311', 'py312']\ninclude = '\\.pyi?$'\n"
  },
  {
    "path": "setup.py",
    "content": "\"\"\"\n# This will not be included in the distribution.\n# The distribution is managed by uv\n# This file is kept only for\n# 1. Github to index the dependents\n# 2. pip install -e .\n\"\"\"\n\nfrom setuptools import setup\n\nsetup(name=\"datar\")\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/conflict_names.py",
    "content": "import argparse\n\n\ndef test_getattr(module, allow_conflict_names, fun, error):\n    from datar import options\n    options(allow_conflict_names=allow_conflict_names)\n\n    if module == \"all\":\n        import datar.all as d\n    elif module == \"base\":\n        import datar.base as d\n    elif module == \"dplyr\":\n        import datar.dplyr as d\n\n    if not error:\n        return getattr(d, fun)\n\n    try:\n        getattr(d, fun)\n    except Exception as e:\n        raised = type(e).__name__\n        assert raised == error, f\"Raised {raised}, expected {error}\"\n    else:\n        raise AssertionError(f\"{error} should have raised\")\n\n\ndef _import(module, fun):\n    if module == \"all\" and fun == \"sum\":\n        from datar.all import sum  # noqa: F401\n    elif module == \"all\" and fun == \"slice\":\n        from datar.all import slice  # noqa: F401\n    elif module == \"base\" and fun == \"sum\":\n        from datar.base import sum  # noqa: F401\n    elif module == \"dplyr\" and fun == \"slice\":\n        from datar.dplyr import slice  # noqa: F401\n\n\ndef test_import(module, allow_conflict_names, fun, error):\n    from datar import options\n    options(allow_conflict_names=allow_conflict_names)\n\n    if not error:\n        return _import(module, fun)\n\n    try:\n        _import(module, fun)\n    except Exception as e:\n        raised = type(e).__name__\n        assert raised == error, f\"Raised {raised}, expected {error}\"\n    else:\n        raise AssertionError(f\"{error} should have raised\")\n\n\ndef make_test(module, allow_conflict_names, getattr, fun, error):\n    if fun == \"_\":\n        fun = \"sum\" if module in [\"all\", \"base\"] else \"slice\"\n\n    if getattr:\n        return test_getattr(module, allow_conflict_names, fun, error)\n\n    return test_import(module, allow_conflict_names, fun, error)\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"--module\",\n        choices=[\"all\", \"base\", \"dplyr\"],\n        required=True,\n        help=\"The module to test\"\n    )\n    parser.add_argument(\n        \"--allow-conflict-names\",\n        action=\"store_true\",\n        help=\"Whether to allow conflict names\",\n        default=False,\n    )\n    parser.add_argument(\n        \"--getattr\",\n        action=\"store_true\",\n        help=(\n            \"Whether to test datar.all.sum, \"\n            \"otherwise test from datar.all import sum.\"\n        ),\n        default=False,\n    )\n    parser.add_argument(\n        \"--fun\",\n        help=(\n            \"The function to test. \"\n            \"If _ then sum for all/base, slice for dplyr\"\n        ),\n        choices=[\"sum\", \"filter\", \"_\"],\n        default=\"_\",\n    )\n    parser.add_argument(\n        \"--error\",\n        help=\"The error to expect\",\n    )\n    args = parser.parse_args()\n\n    make_test(\n        args.module,\n        args.allow_conflict_names,\n        args.getattr,\n        args.fun,\n        args.error,\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "tests/conftest.py",
    "content": "from datar import options\n\n\ndef pytest_sessionstart(session):\n    # Load no plugins\n    options(backends=[None])\n"
  },
  {
    "path": "tests/test_array_ufunc.py",
    "content": "import pytest  # noqa: F401\n\nimport numpy as np\nfrom pipda import Context\nfrom datar import f\nfrom datar.core import plugin as _  # noqa: F401\nfrom datar.apis.misc import array_ufunc\n\n\ndef test_default():\n    out = np.sqrt(f)._pipda_eval([1, 4, 9], Context.EVAL)\n    assert out.tolist() == [1, 2, 3]\n\n\ndef test_misc_obj():\n    class Foo(list):\n        pass\n\n    @array_ufunc.register(Foo)\n    def _array_ufunc(x, ufunc, *args, kind, **kwargs):\n        return ufunc([i * 2 for i in x], *args, **kwargs)\n\n    out = np.sqrt(f)._pipda_eval(Foo([2, 8, 18]), Context.EVAL)\n    assert out.tolist() == [2, 4, 6]\n"
  },
  {
    "path": "tests/test_base.py",
    "content": "import pytest\n\nfrom datar.base import (\n    ceiling,\n    cov,\n    floor,\n    mean,\n    median,\n    pmax,\n    pmin,\n    sqrt,\n    var,\n    scale,\n    col_sums,\n    col_means,\n    col_sds,\n    col_medians,\n    row_sums,\n    row_means,\n    row_sds,\n    row_medians,\n    min_,\n    max_,\n    round_,\n    sum_,\n    abs_,\n    prod,\n    sign,\n    signif,\n    trunc,\n    exp,\n    log,\n    log2,\n    log10,\n    log1p,\n    sd,\n    weighted_mean,\n    quantile,\n    bessel_i,\n    bessel_j,\n    bessel_k,\n    bessel_y,\n    as_double,\n    as_integer,\n    as_logical,\n    as_character,\n    as_factor,\n    as_ordered,\n    as_date,\n    as_numeric,\n    arg,\n    conj,\n    mod,\n    re_,\n    im,\n    as_complex,\n    is_complex,\n    cummax,\n    cummin,\n    cumprod,\n    cumsum,\n    droplevels,\n    levels,\n    set_levels,\n    is_factor,\n    is_ordered,\n    nlevels,\n    factor,\n    ordered,\n    cut,\n    diff,\n    expand_grid,\n    outer,\n    make_names,\n    make_unique,\n    rank,\n    identity,\n    is_logical,\n    is_true,\n    is_false,\n    is_na,\n    is_finite,\n    is_infinite,\n    any_na,\n    as_null,\n    is_null,\n    set_seed,\n    rep,\n    c_,\n    c,\n    length,\n    lengths,\n    order,\n    sort,\n    rev,\n    sample,\n    seq,\n    seq_along,\n    seq_len,\n    match,\n    beta,\n    lgamma,\n    digamma,\n    trigamma,\n    choose,\n    factorial,\n    gamma,\n    lfactorial,\n    lchoose,\n    lbeta,\n    psigamma,\n    rnorm,\n    runif,\n    rpois,\n    rbinom,\n    rcauchy,\n    rchisq,\n    rexp,\n    is_character,\n    grep,\n    grepl,\n    sub,\n    gsub,\n    strsplit,\n    paste,\n    paste0,\n    sprintf,\n    substr,\n    substring,\n    startswith,\n    endswith,\n    strtoi,\n    trimws,\n    toupper,\n    tolower,\n    chartr,\n    nchar,\n    nzchar,\n    table,\n    tabulate,\n    is_atomic,\n    is_double,\n    is_element,\n    is_integer,\n    is_numeric,\n    any_,\n    all_,\n    acos,\n    acosh,\n    asin,\n    asinh,\n    atan,\n    atanh,\n    cos,\n    cosh,\n    cospi,\n    sin,\n    sinh,\n    sinpi,\n    tan,\n    tanh,\n    tanpi,\n    atan2,\n    append,\n    colnames,\n    set_colnames,\n    rownames,\n    set_rownames,\n    dim,\n    diag,\n    duplicated,\n    intersect,\n    ncol,\n    nrow,\n    proportions,\n    setdiff,\n    setequal,\n    unique,\n    t,\n    union,\n    max_col,\n    complete_cases,\n    head,\n    tail,\n    which,\n    which_min,\n    which_max,\n)\n\nfrom datar.core.utils import NotImplementedByCurrentBackendError\n\n\n@pytest.mark.parametrize(\"fun,args\", [\n    (ceiling, [1]),\n    (cov, [[1, 2], [3, 4]]),\n    (floor, [1]),\n    (mean, [1]),\n    (median, [1]),\n    (pmax, [1]),\n    (pmin, [1]),\n    (sqrt, [1]),\n    (var, [1]),\n    (scale, [1]),\n    (col_sums, [1]),\n    (col_means, [1]),\n    (col_sds, [1]),\n    (col_medians, [1]),\n    (row_sums, [1]),\n    (row_means, [1]),\n    (row_sds, [1]),\n    (row_medians, [1]),\n    (min_, [1]),\n    (max_, [1]),\n    (round_, [1]),\n    (sum_, [1]),\n    (abs_, [1]),\n    (prod, [1]),\n    (sign, [1]),\n    (signif, [1]),\n    (trunc, [1]),\n    (exp, [1]),\n    (log, [1]),\n    (log2, [1]),\n    (log10, [1]),\n    (log1p, [1]),\n    (sd, [1]),\n    (weighted_mean, [1]),\n    (quantile, [1]),\n    (bessel_i, [1, 2]),\n    (bessel_j, [1, 2]),\n    (bessel_k, [1, 2]),\n    (bessel_y, [1, 2]),\n    (as_double, [1]),\n    (as_integer, [1]),\n    (as_logical, [1]),\n    (as_character, [1]),\n    (as_factor, [1]),\n    (as_ordered, [1]),\n    (as_date, [1]),\n    (as_numeric, [1]),\n    (arg, [1]),\n    (conj, [1]),\n    (mod, [1]),\n    (re_, [1]),\n    (im, [1]),\n    (as_complex, [1]),\n    (is_complex, [1]),\n    (cummax, [1]),\n    (cummin, [1]),\n    (cumprod, [1]),\n    (cumsum, [1]),\n    (droplevels, [1]),\n    (levels, [1]),\n    (set_levels, [1, 1]),\n    (is_factor, [1]),\n    (is_ordered, [1]),\n    (nlevels, [1]),\n    (factor, [1]),\n    (ordered, [1]),\n    (cut, [1, 1]),\n    (diff, [1]),\n    (expand_grid, [1]),\n    (outer, [1, 1]),\n    (rank, [1]),\n    (is_logical, [1]),\n    (is_true, [1]),\n    (is_false, [1]),\n    (is_na, [1]),\n    (is_finite, [1]),\n    (is_infinite, [1]),\n    (any_na, [1]),\n    (as_null, [1]),\n    (is_null, [1]),\n    (set_seed, [1]),\n    (rep, [1]),\n    (c_, [1]),\n    (c, [1]),\n    (length, [1]),\n    (lengths, [1]),\n    (order, [1]),\n    (rev, [1]),\n    (seq, [1]),\n    (seq_along, [1]),\n    (seq_len, [1]),\n    (sort, [1]),\n    (sample, [1]),\n    (match, [1, 1]),\n    (is_element, [1, 1]),\n    (is_atomic, [1]),\n    (is_double, [1]),\n    (is_integer, [1]),\n    (is_numeric, [1]),\n    (any_, [1]),\n    (all_, [1]),\n    (acos, [1]),\n    (acosh, [1]),\n    (asin, [1]),\n    (asinh, [1]),\n    (atan, [1]),\n    (atanh, [1]),\n    (cos, [1]),\n    (cosh, [1]),\n    (cospi, [1]),\n    (sin, [1]),\n    (sinh, [1]),\n    (sinpi, [1]),\n    (tan, [1]),\n    (tanh, [1]),\n    (tanpi, [1]),\n    (atan2, [1, 1]),\n    (beta, [1, 1]),\n    (choose, [1, 1]),\n    (digamma, [1]),\n    (lgamma, [1]),\n    (lbeta, [1, 1]),\n    (trigamma, [1]),\n    (factorial, [1]),\n    (gamma, [1]),\n    (lchoose, [1, 1]),\n    (lfactorial, [1]),\n    (psigamma, [1, 1]),\n    (rnorm, [1, 1]),\n    (runif, [1, 1]),\n    (rcauchy, [1, 1]),\n    (rchisq, [1, 1]),\n    (rexp, [1, 1]),\n    (rpois, [1, 1]),\n    (rbinom, [1, 1, 1]),\n    (is_character, [1]),\n    (grep, [1, 1]),\n    (grepl, [1, 1]),\n    (sub, [1, 1, 1]),\n    (gsub, [1, 1, 1]),\n    (strsplit, [1, 1]),\n    (paste, [1]),\n    (paste0, [1]),\n    (sprintf, [1]),\n    (substr, [1, 1, 1]),\n    (tolower, [1]),\n    (toupper, [1]),\n    (trimws, [1]),\n    (strtoi, [1]),\n    (substring, [1, 1]),\n    (startswith, [1, 1]),\n    (endswith, [1, 1]),\n    (chartr, [1, 1, 1]),\n    (nchar, [1]),\n    (nzchar, [1]),\n    (table, [1]),\n    (tabulate, [1]),\n    (append, [1, 1]),\n    (colnames, [1]),\n    (set_colnames, [1, 1]),\n    (rownames, [1]),\n    (set_rownames, [1, 1]),\n    (dim, [1]),\n    (diag, [1]),\n    (duplicated, [1]),\n    (intersect, [1, 1]),\n    (ncol, [1]),\n    (nrow, [1]),\n    (proportions, [1]),\n    (setdiff, [1, 1]),\n    (setequal, [1, 1]),\n    (unique, [1]),\n    (union, [1, 1]),\n    (t, [1]),\n    (max_col, [1]),\n    (complete_cases, [1]),\n    (head, [1]),\n    (tail, [1]),\n    (which, [1]),\n    (which_min, [1]),\n    (which_max, [1]),\n])\ndef test_default_implementation(fun, args):\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        fun(*args)\n\n\n@pytest.mark.parametrize(\"x, uniq, y\", [\n    ([\"a\", \"b\", \"c\"], False, [\"a\", \"b\", \"c\"]),\n    (\"a\", False, [\"a\"]),\n    (1, False, [\"_1\"]),\n])\ndef test_make_names(x, uniq, y):\n    out = make_names(x, uniq)\n    assert out == y\n\n\n@pytest.mark.parametrize(\"x, y\", [\n    ([\"a\", \"b\", \"c\"], [\"a\", \"b\", \"c\"]),\n    (\"a\", [\"a\"]),\n])\ndef test_make_unique(x, y):\n    out = make_unique(x)\n    assert out == y\n\n\ndef test_identify():\n    out = identity(1)\n    assert out == 1\n"
  },
  {
    "path": "tests/test_conflict_names.py",
    "content": "import sys\r\nimport subprocess\r\nfrom pathlib import Path\r\n\r\nimport pytest\r\n\r\n\r\ndef _run_conflict_names(module, allow_conflict_names, getat, error):\r\n    here = Path(__file__).parent\r\n    conflict_names = here / \"conflict_names.py\"\r\n    cmd = [\r\n        sys.executable,\r\n        str(conflict_names),\r\n        \"--module\",\r\n        module,\r\n    ]\r\n    if error:\r\n        cmd += [\"--error\", error]\r\n    if allow_conflict_names:\r\n        cmd.append(\"--allow-conflict-names\")\r\n    if getat:\r\n        cmd.append(\"--getattr\")\r\n\r\n    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\r\n    return p.wait(), \" \".join(cmd)\r\n\r\n\r\ndef test_from_all_import_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"all\", True, False, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_from_all_import_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"all\", False, False, \"ImportError\")\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_all_getattr_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"all\", True, True, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_all_getattr_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"all\", False, True, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_from_base_import_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"base\", True, False, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_from_base_import_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"base\", False, False, \"ImportError\")\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_base_getattr_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"base\", True, True, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_base_getattr_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"base\", False, True, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_from_dplyr_import_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"dplyr\", True, False, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_from_dplyr_import_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"dplyr\", False, False, \"ImportError\")\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_dplyr_getattr_allow_conflict_names_true():\r\n    r, cmd = _run_conflict_names(\"dplyr\", True, True, None)\r\n    assert r == 0, cmd\r\n\r\n\r\ndef test_dplyr_getattr_allow_conflict_names_false():\r\n    r, cmd = _run_conflict_names(\"dplyr\", False, True, None)\r\n    assert r == 0, cmd\r\n"
  },
  {
    "path": "tests/test_data.py",
    "content": "import pytest\nfrom datar.data import descr_datasets, add_dataset\nfrom datar.core.utils import NotImplementedByCurrentBackendError\n\n\ndef test_descr_datasets():\n    x = descr_datasets()\n    assert \"iris\" in x\n\n    x = descr_datasets(\"iris\")\n    assert \"iris\" in x and len(x) == 1\n\n\ndef test_add_dataset():\n\n    add_dataset(\"test\", {\"url\": \"\"})\n    assert \"test\" in descr_datasets()\n\n\ndef test_load_dataset():\n\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        from datar.data import iris  # noqa: F401\n\n\ndef test_no_such():\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        from datar.data import nosuch  # noqa: F401\n"
  },
  {
    "path": "tests/test_dplyr.py",
    "content": "import pytest\n\nfrom datar.core.utils import NotImplementedByCurrentBackendError\nfrom datar.dplyr import (\n    across,\n    add_count,\n    add_tally,\n    all_of,\n    anti_join,\n    any_of,\n    arrange,\n    between,\n    bind_cols,\n    bind_rows,\n    c_across,\n    case_when,\n    coalesce,\n    contains,\n    count,\n    cumall,\n    cumany,\n    cume_dist,\n    cummean,\n    cur_column,\n    cur_data,\n    cur_data_all,\n    cur_group,\n    cur_group_id,\n    cur_group_rows,\n    dense_rank,\n    desc,\n    distinct,\n    ends_with,\n    everything,\n    filter_,\n    first,\n    full_join,\n    glimpse,\n    group_by,\n    group_by_drop_default,\n    group_cols,\n    group_data,\n    group_indices,\n    group_keys,\n    group_map,\n    group_modify,\n    group_rows,\n    group_size,\n    group_split,\n    group_trim,\n    group_vars,\n    group_walk,\n    if_all,\n    if_any,\n    if_else,\n    inner_join,\n    lag,\n    last,\n    last_col,\n    lead,\n    left_join,\n    matches,\n    min_rank,\n    mutate,\n    n,\n    n_distinct,\n    n_groups,\n    na_if,\n    near,\n    nest_join,\n    nth,\n    ntile,\n    num_range,\n    order_by,\n    percent_rank,\n    pull,\n    recode,\n    recode_factor,\n    reframe,\n    relocate,\n    rename,\n    rename_with,\n    right_join,\n    row_number,\n    rows_append,\n    rows_delete,\n    rows_insert,\n    rows_patch,\n    rows_update,\n    rows_upsert,\n    rowwise,\n    select,\n    semi_join,\n    slice_,\n    slice_head,\n    slice_min,\n    slice_sample,\n    slice_tail,\n    slice_max,\n    starts_with,\n    summarise,\n    tally,\n    transmute,\n    ungroup,\n    union_all,\n    where,\n    with_groups,\n    with_order,\n    pick,\n    symdiff,\n    consecutive_id,\n    case_match,\n    cross_join,\n)\n\n\n@pytest.mark.parametrize(\"verb, data, args, kwargs\", [\n    (add_count, None, [], None),\n    (add_tally, None, [], None),\n    (anti_join, None, [None], None),\n    (arrange, None, [], None),\n    (between, None, [1, 2], None),\n    (bind_cols, None, [], None),\n    (bind_rows, None, [], None),\n    (case_when, None, [1], None),\n    (coalesce, None, [], None),\n    (count, None, [], None),\n    (cumall, None, [], None),\n    (cumany, None, [], None),\n    (cume_dist, None, [], None),\n    (cummean, None, [], None),\n    (cur_column, None, [1], None),\n    (dense_rank, None, [], None),\n    (desc, None, [], None),\n    (distinct, None, [], None),\n    (filter_, None, [], None),\n    (first, None, [], None),\n    (full_join, None, [1], None),\n    (glimpse, None, [], None),\n    (group_by, None, [], None),\n    (group_by_drop_default, None, [], None),\n    (group_cols, None, [], None),\n    (group_data, None, [], None),\n    (group_indices, None, [], None),\n    (group_keys, None, [], None),\n    (group_map, None, [1], None),\n    (group_modify, None, [1], None),\n    (group_rows, None, [], None),\n    (group_size, None, [], None),\n    (group_split, None, [], None),\n    (group_trim, None, [], None),\n    (group_vars, None, [], None),\n    (group_walk, None, [1], None),\n    (if_else, None, [1, 2], None),\n    (inner_join, None, [1], None),\n    (lag, None, [], None),\n    (last, None, [], None),\n    (lead, None, [], None),\n    (left_join, None, [1], None),\n    (min_rank, None, [], None),\n    (mutate, None, [], None),\n    (n_distinct, None, [], None),\n    (n_groups, None, [], None),\n    (na_if, None, [1], None),\n    (near, None, [1], None),\n    (nest_join, None, [1], None),\n    (nth, None, [1], None),\n    (ntile, None, [], None),\n    (num_range, None, [1], None),\n    (order_by, None, [1], None),\n    (percent_rank, None, [], None),\n    (pull, None, [], None),\n    (recode, None, [], None),\n    (recode_factor, None, [], None),\n    (reframe, None, [], None),\n    (relocate, None, [], None),\n    (rename, None, [], None),\n    (rename_with, None, [1], None),\n    (right_join, None, [1], None),\n    (row_number, None, [], None),\n    (rows_append, None, [None], None),\n    (rows_delete, None, [None], None),\n    (rows_insert, None, [None], None),\n    (rows_patch, None, [None], None),\n    (rows_update, None, [None], None),\n    (rows_upsert, None, [None], None),\n    (rowwise, None, [], None),\n    (select, None, [], None),\n    (semi_join, None, [1], None),\n    (slice_, None, [], None),\n    (slice_head, None, [], None),\n    (slice_min, None, [1], None),\n    (slice_sample, None, [], None),\n    (slice_tail, None, [], None),\n    (slice_max, None, [1], None),\n    (summarise, None, [], None),\n    (tally, None, [], None),\n    (transmute, None, [], None),\n    (ungroup, None, [], None),\n    (union_all, None, [1], None),\n    (with_groups, None, [1, 2], None),\n    (with_order, None, [1, 2], None),\n    (symdiff, None, [None], None),\n    (consecutive_id, None, [], None),\n    (case_match, None, [], None),\n    (cross_join, None, [1], None),\n])\ndef test_verb_not_implemented(verb, data, args, kwargs):\n    kwargs = kwargs or {}\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        verb(data, *args, **kwargs)\n\n\n@pytest.mark.parametrize(\"verb, data, args, kwargs\", [\n    (pick, None, [], None),\n    (across, None, [], None),\n    (if_any, None, [], None),\n    (if_all, None, [], None),\n    (c_across, None, [], None),\n    (cur_data, None, [], None),\n    (n, None, [], None),\n    (cur_data_all, None, [], None),\n    (cur_group, None, [], None),\n    (cur_group_id, None, [], None),\n    (cur_group_rows, None, [], None),\n    (where, None, [1], None),\n    (everything, None, [], None),\n    (last_col, None, [], None),\n    (starts_with, None, [1], None),\n    (ends_with, None, [1], None),\n    (contains, None, [1], None),\n    (matches, None, [1], None),\n    (all_of, None, [1], None),\n    (any_of, None, [1], None),\n])\ndef test_dep_verbs(verb, data, args, kwargs):\n    kwargs = kwargs or {}\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        data >> verb(*args, **kwargs)\n"
  },
  {
    "path": "tests/test_forcats.py",
    "content": "import pytest  # noqa: F401\n\nfrom datar.core.utils import NotImplementedByCurrentBackendError\nfrom datar.forcats import (\n    fct_anon,\n    fct_c,\n    fct_collapse,\n    fct_count,\n    fct_cross,\n    fct_drop,\n    fct_expand,\n    fct_explicit_na,\n    fct_infreq,\n    fct_inorder,\n    fct_inseq,\n    fct_lump,\n    fct_lump_lowfreq,\n    fct_lump_min,\n    fct_lump_n,\n    fct_lump_prop,\n    fct_match,\n    fct_other,\n    fct_recode,\n    fct_relabel,\n    fct_relevel,\n    fct_reorder,\n    fct_reorder2,\n    fct_rev,\n    fct_shift,\n    fct_shuffle,\n    fct_unify,\n    fct_unique,\n    first2,\n    last2,\n    lvls_expand,\n    lvls_reorder,\n    lvls_revalue,\n    lvls_union,\n)\n\n\n@pytest.mark.parametrize(\"verb, data, args, kwargs\", [\n    (fct_anon, None, [], None),\n    (fct_c, None, [], None),\n    (fct_collapse, None, [], None),\n    (fct_count, None, [], None),\n    (fct_cross, None, [], None),\n    (fct_drop, None, [], None),\n    (fct_expand, None, [], None),\n    (fct_explicit_na, None, [], None),\n    (fct_infreq, None, [], None),\n    (fct_inorder, None, [], None),\n    (fct_inseq, None, [], None),\n    (fct_lump, None, [], None),\n    (fct_lump_lowfreq, None, [], None),\n    (fct_lump_min, None, [1], None),\n    (fct_lump_n, None, [1], None),\n    (fct_lump_prop, None, [1], None),\n    (fct_match, None, [1], None),\n    (fct_other, None, [], None),\n    (fct_recode, None, [], None),\n    (fct_relabel, None, [1], None),\n    (fct_relevel, None, [], None),\n    (fct_reorder, None, [1], None),\n    (fct_reorder2, None, [1], None),\n    (fct_rev, None, [], None),\n    (fct_shift, None, [], None),\n    (fct_shuffle, None, [], None),\n    (fct_unify, None, [], None),\n    (fct_unique, None, [], None),\n    (first2, None, [1], None),\n    (last2, None, [1], None),\n    (lvls_expand, None, [1], None),\n    (lvls_reorder, None, [1], None),\n    (lvls_revalue, None, [1], None),\n    (lvls_union, None, [], None),\n])\ndef test_default_impl(verb, data, args, kwargs):\n    kwargs = kwargs or {}\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        verb(data, *args, **kwargs)\n"
  },
  {
    "path": "tests/test_names.py",
    "content": "# https://github.com/r-lib/vctrs/blob/master/tests/testthat/test-names.R\nimport pytest\nfrom typing import Iterable\n\nimport numpy as np\nfrom string import ascii_letters\n\nfrom datar.core.names import (\n    NameNonUniqueError,\n    repair_names,\n)\n\n\n@pytest.mark.parametrize(\n    \"names,expect\",\n    [\n        ([1, 2, 3], [\"1\", \"2\", \"3\"]),\n        ([\"\", np.nan], [\"\", \"\"]),\n        ([\"\", np.nan], [\"\", \"\"]),\n        ([\"\", \"\", np.nan], [\"\", \"\", \"\"]),\n        (repair_names([\"\", \"\", np.nan], repair=\"minimal\"), [\"\", \"\", \"\"]),\n    ],\n)\ndef test_minimal(names, expect):\n    assert repair_names(names, repair=\"minimal\") == expect\n\n\n@pytest.mark.parametrize(\n    \"names,expect\",\n    [\n        ([np.nan, np.nan], [\"__0\", \"__1\"]),\n        ([\"x\", \"x\"], [\"x__0\", \"x__1\"]),\n        ([\"x\", \"y\"], [\"x\", \"y\"]),\n        ([\"\", \"x\", \"y\", \"x\"], [\"__0\", \"x__1\", \"y\", \"x__3\"]),\n        ([\"\"], [\"__0\"]),\n        ([np.nan], [\"__0\"]),\n        (\n            [\"__20\", \"a__33\", \"b\", \"\", \"a__2__34\"],\n            [\"__0\", \"a__1\", \"b\", \"__3\", \"a__4\"],\n        ),\n        ([\"a__1\"], [\"a\"]),\n        ([\"a__2\", \"a\"], [\"a__0\", \"a__1\"]),\n        ([\"a__3\", \"a\", \"a\"], [\"a__0\", \"a__1\", \"a__2\"]),\n        ([\"a__2\", \"a\", \"a\"], [\"a__0\", \"a__1\", \"a__2\"]),\n        ([\"a__2\", \"a__2\", \"a__2\"], [\"a__0\", \"a__1\", \"a__2\"]),\n        (\n            [\"__20\", \"a__1\", \"b\", \"\", \"a__2\"],\n            [\"__0\", \"a__1\", \"b\", \"__3\", \"a__4\"],\n        ),\n        (\n            repair_names([\"__20\", \"a__1\", \"b\", \"\", \"a__2\"], repair=\"unique\"),\n            [\"__0\", \"a__1\", \"b\", \"__3\", \"a__4\"],\n        ),\n        (\n            [\"\", \"x\", \"\", \"y\", \"x\", \"_2\", \"__\"],\n            [\"__0\", \"x__1\", \"__2\", \"y\", \"x__4\", \"__5\", \"__6\"],\n        ),\n    ],\n)\ndef test_unique(names, expect):\n    assert repair_names(names, repair=\"unique\") == expect\n\n\ndef test_unique_algebraic_y():\n    x = [\"__20\", \"a__1\", \"b\", \"\", \"a__2\", \"d\"]\n    y = [\"\", \"a__3\", \"b\", \"__3\", \"e\"]\n    # fix names on each, catenate, fix the whole\n    z1 = repair_names(\n        repair_names(x, repair=\"unique\") + repair_names(y, repair=\"unique\"),\n        repair=\"unique\",\n    )\n    z2 = repair_names(repair_names(x, repair=\"unique\") + y, repair=\"unique\")\n    z3 = repair_names(x + repair_names(y, repair=\"unique\"), repair=\"unique\")\n    z4 = repair_names(x + y, repair=\"unique\")\n    assert z1 == z2 == z3 == z4\n\n\n@pytest.mark.parametrize(\n    \"names,expect\",\n    [\n        (list(ascii_letters), list(ascii_letters)),\n        (\n            [np.nan, \"\", \"x\", \"x\", \"a1:\", \"_x_y}\"],\n            [\"__0\", \"__1\", \"x__2\", \"x__3\", \"a1_\", \"_x_y_\"],\n        ),\n        (\n            repair_names(\n                [np.nan, \"\", \"x\", \"x\", \"a1:\", \"_x_y}\"], repair=\"universal\"\n            ),\n            [\"__0\", \"__1\", \"x__2\", \"x__3\", \"a1_\", \"_x_y_\"],\n        ),\n        ([\"a\", \"b\", \"a\", \"c\", \"b\"], [\"a__0\", \"b__1\", \"a__2\", \"c\", \"b__4\"]),\n        ([\"\"], [\"__0\"]),\n        ([np.nan], [\"__0\"]),\n        ([\"__\"], [\"__0\"]),\n        ([\"_\"], [\"_\"]),\n        ([\"_\", \"_\"], [\"___0\", \"___1\"]),\n        ([\"\", \"_\"], [\"__0\", \"_\"]),\n        ([\"\", \"\", \"_\"], [\"__0\", \"__1\", \"_\"]),\n        ([\"_\", \"_\", \"\"], [\"___0\", \"___1\", \"__2\"]),\n        ([\"_\", \"\", \"_\"], [\"___0\", \"__1\", \"___2\"]),\n        ([\"\", \"_\", \"\"], [\"__0\", \"_\", \"__2\"]),\n        ([\"__6\", \"__1__2\"], [\"__0\", \"__1\"]),\n        ([\"if__2\"], [\"_if\"]),\n        (\n            [\"\", \"_\", np.nan, \"if__4\", \"if\", \"if__8\", \"for\", \"if){]1\"],\n            [\n                \"__0\",\n                \"_\",\n                \"__2\",\n                \"_if__3\",\n                \"_if__4\",\n                \"_if__5\",\n                \"_for\",\n                \"if___1\",\n            ],\n        ),\n        ([\"a b\", \"b c\"], [\"a_b\", \"b_c\"]),\n        (\n            [\"\", \"_2\", \"_3\", \"__4\", \"___5\", \"____6\", \"_____7\", \"__\"],\n            [\"__0\", \"__1\", \"__2\", \"__3\", \"___5\", \"____6\", \"_____7\", \"__7\"],\n        ),\n        (\n            repair_names(\n                [\"\", \"_2\", \"_3\", \"__4\", \"___5\", \"____6\", \"_____7\", \"__\"],\n                repair=\"unique\",\n            ),\n            [\"__0\", \"__1\", \"__2\", \"__3\", \"___5\", \"____6\", \"_____7\", \"__7\"],\n        ),\n        (\n            [7, 4, 3, 6, 5, 1, 2, 8],\n            [\"_7\", \"_4\", \"_3\", \"_6\", \"_5\", \"_1\", \"_2\", \"_8\"],\n        ),\n        (\n            repair_names([7, 4, 3, 6, 5, 1, 2, 8], repair=\"unique\"),\n            [\"_7\", \"_4\", \"_3\", \"_6\", \"_5\", \"_1\", \"_2\", \"_8\"],\n        ),\n    ],\n)\ndef test_universal(names, expect):\n    assert repair_names(names, repair=\"universal\") == expect\n\n\ndef test_check_unique():\n    with pytest.raises(NameNonUniqueError):\n        repair_names([np.nan], repair=\"check_unique\")\n    with pytest.raises(NameNonUniqueError):\n        repair_names([\"\"], repair=\"check_unique\")\n    with pytest.raises(NameNonUniqueError):\n        repair_names([\"a\", \"a\"], repair=\"check_unique\")\n    with pytest.raises(NameNonUniqueError):\n        repair_names([\"__1\"], repair=\"check_unique\")\n    with pytest.raises(NameNonUniqueError):\n        repair_names([\"__\"], repair=\"check_unique\")\n    assert repair_names([\"a\", \"b\"], repair=\"check_unique\") == [\"a\", \"b\"]\n\n\ndef test_custom_repair():\n    def replace(names: Iterable[str]):\n        return [\"a\", \"b\", \"c\"]\n\n    out = repair_names([1, 2, 3], repair=replace)\n    assert out == [\"a\", \"b\", \"c\"]\n\n    with pytest.raises(ValueError):\n        repair_names([1, 2, 3], repair=1)\n\n    out = repair_names([\"a\", \"b\", \"c\"], repair=str.upper)\n    assert out == [\"A\", \"B\", \"C\"]\n\n    out = repair_names([\"a\", \"b\", \"c\"], repair=[\"x\", \"y\", \"z\"])\n    assert out == [\"x\", \"y\", \"z\"]\n"
  },
  {
    "path": "tests/test_options.py",
    "content": "import pytest\nfrom datar.core.options import (\n    options,\n    options_context,\n    add_option,\n    get_option,\n)\n\n\n@pytest.fixture(autouse=True)\ndef reset_options():\n    opts = options()\n    add_option(\"x_y_z\", True)\n    yield\n    options(opts)\n\n\ndef test_options_empty_args_returns_full_options():\n    from datar.core.options import OPTIONS\n    out = options()\n    assert out == OPTIONS\n\n\ndef test_options_with_names_only_selects_options():\n    out = options(\"x_y_z\")\n    assert len(out) == 1\n    assert out[\"x_y_z\"]\n\n\ndef test_opts_with_names_nameval_pairs_mixed_rets_sel_opts_and_changes_option():\n    out = options(x_y_z=False, _return=True)\n    assert out == {\"x_y_z\": True}\n    assert not get_option(\"x.y.z\")\n\n\ndef test_options_with_dict_updates_options():\n    out = options({\"x_y_z\": True}, _return=True)\n    assert get_option(\"x_y_z\")\n    assert out.x_y_z\n\n\ndef test_options_context():\n    assert get_option(\"x_y_z\")\n    with options_context(x_y_z=False):\n        assert not get_option(\"x_y_z\")\n\n    assert get_option(\"x_y_z\")\n"
  },
  {
    "path": "tests/test_pipe.py",
    "content": "import pytest\nfrom datar.all import pipe\n\n\ndef test_pipe_with_list():\n    \"\"\"Test pipe with a list\"\"\"\n    data = [1, 2, 3, 4, 5]\n    result = data >> pipe(lambda x: [i * 2 for i in x])\n    expected = [2, 4, 6, 8, 10]\n    assert result == expected\n\n\ndef test_pipe_with_dict():\n    \"\"\"Test pipe with a dictionary\"\"\"\n    data = {'a': 1, 'b': 2, 'c': 3}\n    result = data >> pipe(lambda x: {k: v * 2 for k, v in x.items()})\n    expected = {'a': 2, 'b': 4, 'c': 6}\n    assert result == expected\n\n\ndef test_pipe_with_args():\n    \"\"\"Test pipe with additional positional arguments\"\"\"\n    data = [1, 2, 3]\n    \n    def add_value(data, value):\n        return [x + value for x in data]\n    \n    result = data >> pipe(add_value, 10)\n    expected = [11, 12, 13]\n    assert result == expected\n\n\ndef test_pipe_with_kwargs():\n    \"\"\"Test pipe with keyword arguments\"\"\"\n    data = [1, 2, 3]\n    \n    def multiply_data(data, factor=1):\n        return [x * factor for x in data]\n    \n    result = data >> pipe(multiply_data, factor=10)\n    expected = [10, 20, 30]\n    assert result == expected\n\n\ndef test_pipe_with_string():\n    \"\"\"Test pipe with string operations\"\"\"\n    data = \"hello\"\n    result = data >> pipe(lambda x: x.upper())\n    assert result == \"HELLO\"\n\n\ndef test_pipe_with_tuple():\n    \"\"\"Test pipe with tuple\"\"\"\n    data = (1, 2, 3)\n    result = data >> pipe(lambda x: tuple(i * 2 for i in x))\n    expected = (2, 4, 6)\n    assert result == expected\n\n\ndef test_pipe_returns_different_type():\n    \"\"\"Test that pipe can return different types\"\"\"\n    data = [1, 2, 3, 4, 5]\n    result = data >> pipe(sum)\n    assert result == 15\n\n\ndef test_pipe_chain_multiple():\n    \"\"\"Test chaining multiple pipe operations\"\"\"\n    data = [1, 2, 3]\n    \n    result = (\n        data \n        >> pipe(lambda x: [i * 2 for i in x])\n        >> pipe(lambda x: [i + 1 for i in x])\n    )\n    expected = [3, 5, 7]\n    assert result == expected\n\n\ndef test_pipe_with_custom_class():\n    \"\"\"Test pipe with a custom class\"\"\"\n    class Counter:\n        def __init__(self, value):\n            self.value = value\n        \n        def increment(self, amount):\n            return Counter(self.value + amount)\n        \n        def __eq__(self, other):\n            return self.value == other.value\n    \n    counter = Counter(5)\n    result = counter >> pipe(lambda x: x.increment(10))\n    expected = Counter(15)\n    assert result == expected\n\n\ndef test_pipe_with_multiple_args_and_kwargs():\n    \"\"\"Test pipe with both args and kwargs\"\"\"\n    data = [1, 2, 3]\n    \n    def transform(data, multiplier, offset=0):\n        return [x * multiplier + offset for x in data]\n    \n    result = data >> pipe(transform, 2, offset=5)\n    expected = [7, 9, 11]\n    assert result == expected\n\n"
  },
  {
    "path": "tests/test_plugin.py",
    "content": "import pytest\n\nimport numpy as np\nfrom simplug import MultipleImplsForSingleResultHookWarning\nfrom pipda import Context\nfrom pipda.utils import MultiImplementationsWarning\nfrom datar import f\nfrom datar.core.plugin import plugin\nfrom datar.core.operator import DatarOperator\n\n\nclass TestPlugin1:\n\n    @plugin.impl\n    def get_versions():\n        return {\"abc\": \"1.2.3\"}\n\n    @plugin.impl\n    def load_dataset(name, metadata):\n        return name * 2\n\n    @plugin.impl\n    def misc_api():\n        from datar.apis.misc import array_ufunc\n\n        @array_ufunc.register(object, backend=\"testplugin1\")\n        def _array_ufunc(x, ufunc, *args, kind, **kwargs):\n            return ufunc([i * 3 for i in x], *args, **kwargs)\n\n        return {\"other_var\": 1}\n\n    @plugin.impl\n    def operate(op, x, y=None):\n        if op == \"add\":\n            return x + y + x * y\n        return None\n\n    @plugin.impl\n    def c_getitem(item):\n        return item * 2\n\n\nclass TestPlugin2:\n\n    @plugin.impl\n    def load_dataset(name, metadata):\n        return name * 3\n\n    @plugin.impl\n    def c_getitem(item):\n        return item * 4\n\n    @plugin.impl\n    def operate(op, x, y=None):\n        if op == \"add\":\n            return x + y + 2 * x * y\n        return None\n\n\ndef setup_function(function):\n    plugin.register(TestPlugin1)\n    plugin.register(TestPlugin2)\n    plugin.get_plugin(\"testplugin1\").disable()\n    plugin.get_plugin(\"testplugin2\").disable()\n\n\n@pytest.fixture\ndef with_test_plugin1():\n    plugin.get_plugin(\"testplugin1\").enable()\n    yield\n    plugin.get_plugin(\"testplugin1\").disable()\n\n\n@pytest.fixture\ndef with_test_plugin2():\n    plugin.get_plugin(\"testplugin2\").enable()\n    yield\n    plugin.get_plugin(\"testplugin2\").disable()\n\n\ndef test_get_versions(with_test_plugin1, capsys):\n    from datar import get_versions\n    assert get_versions(prnt=False)[\"abc\"] == \"1.2.3\"\n\n    get_versions()\n    assert \"datar\" in capsys.readouterr().out\n\n\ndef test_misc_api(with_test_plugin1):\n    from datar import all, misc\n    plugin.hooks.misc_api()\n    from importlib import reload\n    reload(misc)\n    assert misc.other_var == 1\n\n    reload(all)\n    from datar.all import other_var\n    assert other_var == 1\n\n\ndef test_misc_api_array_ufunc(with_test_plugin1):\n    from datar import f\n    from datar.apis.misc import array_ufunc\n\n    plugin.hooks.misc_api()\n\n    with pytest.warns(MultiImplementationsWarning):\n        out = np.sqrt(f)._pipda_eval([3, 12, 27], Context.EVAL)\n\n    assert out.tolist() == [3, 6, 9]\n\n    with array_ufunc.with_backend(\"_default\"):\n        out = np.sqrt(f)._pipda_eval([1, 4, 9], Context.EVAL)\n\n    assert out.tolist() == [1, 2, 3]\n\n\ndef test_load_dataset(with_test_plugin1, with_test_plugin2):\n    with pytest.warns(MultipleImplsForSingleResultHookWarning):\n        from datar.data import iris\n\n    assert iris == \"irisirisiris\"\n\n    from datar.data import load_dataset\n    assert load_dataset(\"iris\", __backend=\"testplugin1\") == \"irisiris\"\n\n\ndef test_operate(with_test_plugin1):\n\n    expr = f[0] + f[1]\n    assert expr._pipda_eval([3, 2], Context.EVAL) == 11\n\n\ndef test_operate2(with_test_plugin1, with_test_plugin2):\n    expr = f[0] + f[1]\n    with pytest.warns(MultipleImplsForSingleResultHookWarning):\n        assert expr._pipda_eval([3, 2], Context.EVAL) == 17\n\n    with DatarOperator.with_backend(\"testplugin1\"):\n        assert expr._pipda_eval([3, 2], Context.EVAL) == 11\n\n    with pytest.warns(MultipleImplsForSingleResultHookWarning):\n        assert expr._pipda_eval([3, 2], Context.EVAL) == 17\n\n\ndef test_c_getitem(with_test_plugin1):\n    from datar.base import c\n    assert c[11] == 22\n\n\ndef test_c_getitem2(with_test_plugin1, with_test_plugin2):\n    from datar.base import c\n    with pytest.warns(MultipleImplsForSingleResultHookWarning):\n        assert c[11] == 44\n\n    with c.with_backend(\"testplugin1\"):\n        assert c[11] == 22\n\n    with pytest.warns(MultipleImplsForSingleResultHookWarning):\n        assert c[11] == 44\n"
  },
  {
    "path": "tests/test_tibble.py",
    "content": "import pytest  # noqa: F401\n\nfrom datar.core.utils import NotImplementedByCurrentBackendError\nfrom datar.tibble import (\n    add_column,\n    add_row,\n    as_tibble,\n    column_to_rownames,\n    deframe,\n    enframe,\n    has_rownames,\n    remove_rownames,\n    rowid_to_column,\n    rownames_to_column,\n    tibble,\n    tibble_,\n    tibble_row,\n    tribble,\n)\n\n\n@pytest.mark.parametrize(\"verb, data, args, kwargs\", [\n    (add_column, None, [1], None),\n    (add_row, None, [1], None),\n    (as_tibble, None, [], None),\n    (column_to_rownames, None, [], None),\n    (deframe, None, [], None),\n    (enframe, None, [], None),\n    (has_rownames, None, [], None),\n    (remove_rownames, None, [], None),\n    (rowid_to_column, None, [\"x\"], None),\n    (rownames_to_column, None, [\"x\"], None),\n    (tibble, None, [], None),\n    (tibble_, None, [], None),\n    (tibble_row, None, [], None),\n    (tribble, None, [], None),\n])\ndef test_default_impl(verb, data, args, kwargs):\n    kwargs = kwargs or {}\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        verb(data, *args, **kwargs)\n"
  },
  {
    "path": "tests/test_tidyr.py",
    "content": "import pytest\n\nfrom datar.core.utils import NotImplementedByCurrentBackendError\nfrom datar.tidyr import (\n    chop,\n    complete,\n    crossing,\n    drop_na,\n    expand,\n    extract,\n    fill,\n    full_seq,\n    nest,\n    nesting,\n    pack,\n    pivot_longer,\n    pivot_wider,\n    replace_na,\n    separate,\n    separate_rows,\n    unchop,\n    uncount,\n    unite,\n    unnest,\n    unpack,\n)\n\n\n@pytest.mark.parametrize(\"verb, data, args, kwargs\", [\n    (chop, None, [], None),\n    (complete, None, [], None),\n    (crossing, None, [], None),\n    (drop_na, None, [], None),\n    (expand, None, [], None),\n    (extract, None, [1, 1], None),\n    (fill, None, [], None),\n    (full_seq, None, [1], None),\n    (nest, None, [], None),\n    (nesting, None, [], None),\n    (pack, None, [], None),\n    (pivot_longer, None, [1], None),\n    (pivot_wider, None, [], None),\n    (replace_na, None, [], None),\n    (separate, None, [1, 1], None),\n    (separate_rows, None, [], None),\n    (unchop, None, [], None),\n    (uncount, None, [1], None),\n    (unite, None, [1], None),\n    (unnest, None, [], None),\n    (unpack, None, [1], None),\n])\ndef test_default_impl(verb, data, args, kwargs):\n    kwargs = kwargs or {}\n    with pytest.raises(NotImplementedByCurrentBackendError):\n        verb(data, *args, **kwargs)\n"
  },
  {
    "path": "tests/test_utils.py",
    "content": "import pytest\nfrom datar.core.utils import arg_match\n\n\ndef test_arg_match():\n    with pytest.raises(ValueError, match='abc'):\n        arg_match('a', 'a', ['b', 'c'], errmsg='abc')\n    with pytest.raises(ValueError, match='must be one of'):\n        arg_match('a', 'a', ['b', 'c'])\n\n    assert arg_match('a', 'a', ['a', 'b', 'c']) == 'a'\n"
  },
  {
    "path": "tests/test_verb_env.py",
    "content": "\"\"\"Tests for verb environment variable support\"\"\"\nimport os\nimport pytest\n\n\ndef test_env_var_global():\n    \"\"\"Test global environment variable DATAR_VERB_AST_FALLBACK\"\"\"\n    # Set the global environment variable\n    os.environ[\"DATAR_VERB_AST_FALLBACK\"] = \"piping\"\n\n    try:\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # Test that the function reads the environment variable\n        result = get_verb_ast_fallback(\"test_verb\")\n        assert result == \"piping\"\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_VERB_AST_FALLBACK\"]\n\n\ndef test_env_var_per_verb():\n    \"\"\"Test per-verb environment variable DATAR_<VERB>_AST_FALLBACK\"\"\"\n    # Set a per-verb environment variable\n    os.environ[\"DATAR_SELECT_AST_FALLBACK\"] = \"normal\"\n\n    try:\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # Test that the function reads the per-verb environment variable\n        result = get_verb_ast_fallback(\"select\")\n        assert result == \"normal\"\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_SELECT_AST_FALLBACK\"]\n\n\ndef test_env_var_per_verb_with_trailing_underscore():\n    \"\"\"Test per-verb environment variable for verbs with trailing underscore\"\"\"\n    # Set a per-verb environment variable for filter_ verb\n    os.environ[\"DATAR_FILTER_AST_FALLBACK\"] = \"raise\"\n\n    try:\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # Test that the function reads the per-verb environment variable\n        # even when the function name has a trailing underscore\n        result = get_verb_ast_fallback(\"filter_\")\n        assert result == \"raise\"\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_FILTER_AST_FALLBACK\"]\n\n\ndef test_env_var_precedence():\n    \"\"\"Test that per-verb environment variable takes precedence over global\"\"\"\n    os.environ[\"DATAR_VERB_AST_FALLBACK\"] = \"piping\"\n    os.environ[\"DATAR_MUTATE_AST_FALLBACK\"] = \"normal\"\n\n    try:\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # For mutate, the per-verb setting should take precedence\n        result = get_verb_ast_fallback(\"mutate\")\n        assert result == \"normal\"\n\n        # For other verbs, the global setting should be used\n        result = get_verb_ast_fallback(\"select\")\n        assert result == \"piping\"\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_VERB_AST_FALLBACK\"]\n        del os.environ[\"DATAR_MUTATE_AST_FALLBACK\"]\n\n\ndef test_env_var_not_set():\n    \"\"\"Test behavior when no environment variable is set\"\"\"\n    # Ensure no relevant environment variables are set\n    for key in list(os.environ.keys()):\n        if key.startswith(\"DATAR_\") and key.endswith(\"_AST_FALLBACK\"):\n            del os.environ[key]\n\n    from datar.core.verb_env import get_verb_ast_fallback\n\n    # Should return None when no environment variable is set\n    result = get_verb_ast_fallback(\"test_verb\")\n    assert result is None\n\n\ndef test_verb_with_env_var():\n    \"\"\"Test that verbs can use the helper function\"\"\"\n    os.environ[\"DATAR_VERB_AST_FALLBACK\"] = \"normal\"\n\n    try:\n        from pipda import register_verb\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # Define a simple test verb using the helper\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"test_verb\"))\n        def test_verb(data):\n            \"\"\"Test verb\"\"\"\n            return data\n\n        # The verb should be registered\n        assert callable(test_verb)\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_VERB_AST_FALLBACK\"]\n\n\ndef test_explicit_ast_fallback_with_env_var():\n    \"\"\"Test that explicit ast_fallback is used even when env var is set\"\"\"\n    os.environ[\"DATAR_VERB_AST_FALLBACK\"] = \"normal\"\n\n    try:\n        from pipda import register_verb\n        from datar.core.verb_env import get_verb_ast_fallback\n\n        # When we explicitly pass an ast_fallback, it should be used\n        # But if we use the helper, it will return the env var value\n        # This test verifies the helper returns the env var\n        result = get_verb_ast_fallback(\"test_verb\")\n        assert result == \"normal\"\n\n    finally:\n        # Clean up\n        del os.environ[\"DATAR_VERB_AST_FALLBACK\"]\n"
  },
  {
    "path": "tests/test_verb_env_integration.py",
    "content": "\"\"\"Integration test to demonstrate the environment variable feature\"\"\"\nimport os\nimport pytest\n\n\ndef test_verb_ast_fallback_piping():\n    \"\"\"Test that DATAR_*_AST_FALLBACK works with piping mode\"\"\"\n    from pipda import register_verb\n    from datar.core.verb_env import get_verb_ast_fallback\n\n    # Set environment variable for piping mode\n    os.environ['DATAR_PLUS_AST_FALLBACK'] = 'piping'\n\n    try:\n        # Register a simple verb\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"plus\"))\n        def plus(x, y):\n            return x + y\n\n        # Test with exec to disable source code detection at runtime\n        # In piping mode, piping call should work\n        result = {}\n        exec(\"result['val'] = 1 >> plus(1)\", {\"plus\": plus, \"result\": result})\n        assert result['val'] == 2\n\n        # Normal call in piping mode returns a placeholder when AST is not available\n        result = {}\n        exec(\"result['val'] = plus(1, 1)\", {\"plus\": plus, \"result\": result})\n        # The result is a placeholder object, not the actual computation\n        assert str(result['val']) == 'plus(., 1, 1)'\n\n    finally:\n        del os.environ['DATAR_PLUS_AST_FALLBACK']\n\n\ndef test_verb_ast_fallback_normal():\n    \"\"\"Test that DATAR_*_AST_FALLBACK works with normal mode\"\"\"\n    from pipda import register_verb\n    from datar.core.verb_env import get_verb_ast_fallback\n\n    # Set environment variable for normal mode\n    os.environ['DATAR_MINUS_AST_FALLBACK'] = 'normal'\n\n    try:\n        # Register a simple verb\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"minus\"))\n        def minus(x, y):\n            return x - y\n\n        # Test with exec to disable source code detection at runtime\n        # In normal mode, normal call should work\n        result = {}\n        exec(\"result['val'] = minus(5, 3)\", {\"minus\": minus, \"result\": result})\n        assert result['val'] == 2\n\n        # Piping call in normal mode raises TypeError when AST is not available\n        result = {}\n        with pytest.raises(TypeError):\n            exec(\"result['val'] = 5 >> minus(3)\", {\"minus\": minus, \"result\": result})\n\n    finally:\n        del os.environ['DATAR_MINUS_AST_FALLBACK']\n\n\ndef test_verb_ast_fallback_global():\n    \"\"\"Test that DATAR_VERB_AST_FALLBACK works as global fallback\"\"\"\n    from pipda import register_verb\n    from datar.core.verb_env import get_verb_ast_fallback\n\n    # Set global environment variable\n    os.environ['DATAR_VERB_AST_FALLBACK'] = 'piping'\n\n    try:\n        # Register verbs without specific env var\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"multiply\"))\n        def multiply(x, y):\n            return x * y\n\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"divide\"))\n        def divide(x, y):\n            return x / y\n\n        # Both should use global piping mode\n        result = {}\n        exec(\"result['mul'] = 6 >> multiply(2)\", {\"multiply\": multiply, \"result\": result})\n        assert result['mul'] == 12\n\n        exec(\"result['div'] = 10 >> divide(2)\", {\"divide\": divide, \"result\": result})\n        assert result['div'] == 5\n\n    finally:\n        del os.environ['DATAR_VERB_AST_FALLBACK']\n\n\ndef test_verb_ast_fallback_precedence():\n    \"\"\"Test that per-verb env var takes precedence over global\"\"\"\n    from pipda import register_verb\n    from datar.core.verb_env import get_verb_ast_fallback\n\n    # Set global to piping and specific verb to normal\n    os.environ['DATAR_VERB_AST_FALLBACK'] = 'piping'\n    os.environ['DATAR_MODULO_AST_FALLBACK'] = 'normal'\n\n    try:\n        # Register verbs\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"power\"))\n        def power(x, y):\n            return x ** y\n\n        @register_verb(ast_fallback=get_verb_ast_fallback(\"modulo\"))\n        def modulo(x, y):\n            return x % y\n\n        # power should use global piping mode\n        result = {}\n        exec(\"result['pow'] = 2 >> power(3)\", {\"power\": power, \"result\": result})\n        assert result['pow'] == 8\n\n        # modulo should use specific normal mode\n        exec(\"result['mod'] = modulo(10, 3)\", {\"modulo\": modulo, \"result\": result})\n        assert result['mod'] == 1\n\n    finally:\n        del os.environ['DATAR_VERB_AST_FALLBACK']\n        del os.environ['DATAR_MODULO_AST_FALLBACK']\n\n\nif __name__ == \"__main__\":\n    test_verb_ast_fallback_piping()\n    test_verb_ast_fallback_normal()\n    test_verb_ast_fallback_global()\n    test_verb_ast_fallback_precedence()\n    print(\"All integration tests passed!\")\n"
  },
  {
    "path": "tox.ini",
    "content": "[flake8]\nignore = E203, W503, E731\nper-file-ignores =\n    # imported but unused\n    __init__.py: F401, E402\n    datar/all.py: F401, E402, F403, F811\n    datar/apis/base.py: F401\n    datar/apis/dplyr.py: F401\n    datar/apis/forcats.py: F401\n    datar/apis/tidyr.py: F401\n    datar/forcats.py: F401, F403\n    datar/tidyr.py: F401, F403\n    datar/tibble.py: F401, F403\n    datar/base.py: F401, F402, F403, E402\n    datar/dplyr.py: F401, F402, F403, E402\n    datar/data/metadata.py: E501\n    tests/test_conflict_names.py: F401\nmax-line-length = 81\n"
  }
]