{"id":13857579,"url":"https://github.com/nathaneastwood/poorman","last_synced_at":"2025-09-08T04:10:26.476Z","repository":{"id":49928336,"uuid":"240716549","full_name":"nathaneastwood/poorman","owner":"nathaneastwood","description":"A poor man's dependency free grammar of data manipulation","archived":false,"fork":false,"pushed_at":"2024-02-08T13:41:42.000Z","size":6911,"stargazers_count":347,"open_issues_count":21,"forks_count":15,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-08-14T07:34:43.140Z","etag":null,"topics":["base-r","data-manipulation","grammar","r"],"latest_commit_sha":null,"homepage":"https://nathaneastwood.github.io/poorman/","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nathaneastwood.png","metadata":{"files":{"readme":"README.Rmd","changelog":null,"contributing":".github/contributing.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["nathaneastwood"]}},"created_at":"2020-02-15T13:24:25.000Z","updated_at":"2025-05-25T11:59:32.000Z","dependencies_parsed_at":"2023-02-06T04:32:07.544Z","dependency_job_id":"d4ef4f2a-91b1-4e3e-80f3-99bbc3763622","html_url":"https://github.com/nathaneastwood/poorman","commit_stats":{"total_commits":340,"total_committers":6,"mean_commits":"56.666666666666664","dds":0.04117647058823526,"last_synced_commit":"375974019315da07972f1a2bf639bfe0678b03ae"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/nathaneastwood/poorman","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nathaneastwood%2Fpoorman","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nathaneastwood%2Fpoorman/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nathaneastwood%2Fpoorman/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nathaneastwood%2Fpoorman/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nathaneastwood","download_url":"https://codeload.github.com/nathaneastwood/poorman/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nathaneastwood%2Fpoorman/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274130321,"owners_count":25227292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["base-r","data-manipulation","grammar","r"],"created_at":"2024-08-05T03:01:41.082Z","updated_at":"2025-09-08T04:10:26.457Z","avatar_url":"https://github.com/nathaneastwood.png","language":"R","funding_links":["https://github.com/sponsors/nathaneastwood"],"categories":["R"],"sub_categories":[],"readme":"---\noutput: github_document\n---\n\n\u003c!-- README.md is generated from README.Rmd. Please edit that file --\u003e\n\n```{r, include = FALSE}\nknitr::opts_chunk$set(\n  collapse = TRUE,\n  comment = \"#\",\n  fig.path = \"man/figures/README-\",\n  out.width = \"100%\"\n)\noptions(poorman.summarise.inform = FALSE)\n```\n\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n# {poorman} \u003ca href='https://nathaneastwood.github.io/tags/poorman/'\u003e\u003cimg src='man/figures/logo.png' align=\"right\" height=\"139\" /\u003e\u003c/a\u003e\n\n[![CRAN status](https://www.r-pkg.org/badges/version/poorman)](https://cran.r-project.org/package=poorman)\n[![Dependencies](https://tinyverse.netlify.com/badge/poorman)](https://cran.r-project.org/package=poorman)\n![CRAN downloads](https://cranlogs.r-pkg.org/badges/poorman)\n[![R-CMD-check](https://github.com/nathaneastwood/poorman/actions/workflows/check-standard.yaml/badge.svg)](https://github.com/nathaneastwood/poorman/actions/workflows/check-standard.yaml)\n[![codecov](https://codecov.io/gh/nathaneastwood/poorman/branch/master/graph/badge.svg?token=YPQSSEEHZJ)](https://app.codecov.io/gh/nathaneastwood/poorman)\n\n\u003cblockquote align=\"center\"\u003e\n  I'd seen my father. He was a poor man, and I watched him do astonishing things.\n    - Sidney Poitier\n\u003c/blockquote\u003e\n\n## Overview\n\n{poorman} is a grammar of data manipulation, providing dependency free versions of [{dplyr}](https://github.com/tidyverse/dplyr) verbs that help you solve the most common data manipulation challenges:\n\n* `select()` picks variables based on their names.\n* `mutate()` adds new variables that are functions of existing variables.\n* `filter()` picks cases based on their values.\n* `summarise()` reduces multiple values down to a single summary.\n* `arrange()` changes the ordering of the rows.\n\n{poorman} attempts to replicate the {dplyr} API exactly such that your {dplyr} code will still run even if you use {poorman} in its place. In addition to replicating {dplyr} functionality, {poorman} implements other functionality from the wider {tidyverse} such as select helpers and the pipe, `%\u003e%`.\n\nFor more details on the functionality available within {poorman}, check out the {poorman} series of blog posts [here](https://nathaneastwood.github.io/tags/poorman/).\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Installation\n\nYou can install:\n\n* the development version from [GitHub](https://github.com/nathaneastwood/poorman) with\n\n```{r installation, eval = FALSE}\n# install.packages(\"remotes\")\nremotes::install_github(\"nathaneastwood/poorman\")\n```\n\n* the latest release from CRAN with\n\n```{r cran, eval = FALSE}\ninstall.packages(\"poorman\")\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Docker\n\nIf you'd like to try out the latest version of the package on CRAN using Docker, you can run the latest image with:\n\n```{bash, eval = FALSE}\ndocker run --rm -it nathaneastwood/poorman\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Usage\n\n```{r usage}\nlibrary(poorman, warn.conflicts = FALSE)\n\nmtcars %\u003e%\n  select(mpg, wt, starts_with(\"c\")) %\u003e%\n  mutate(kpl = (1.609 * mpg) / 3.785, wt_kg = wt * 453.5924) %\u003e%\n  filter(mpg \u003e 28)\n\nmtcars %\u003e%\n  group_by(am, cyl) %\u003e%\n  summarise(mean_mpg = mean(mpg), sd_mpg = sd(mpg)) %\u003e%\n  ungroup()\n```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Related Work\n\n* [{dplyr}](https://github.com/tidyverse/dplyr)\n* [{bplyr}](https://github.com/yonicd/bplyr) - imports {magrittr} and {rlang}; it prepends functions with `b_*()`, e.g. `b_select()`.\n* [{tbltools}](https://github.com/mkearney/tbltools) - imports {magrittr} and appends `*_data()` to each of its functions, e.g. `select_data()`.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnathaneastwood%2Fpoorman","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnathaneastwood%2Fpoorman","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnathaneastwood%2Fpoorman/lists"}