How To Select Multiple Columns Using Grep & R

linux system admin

Why you need to be using Grep when programming with R.

There’s a reason that grep is included in most if not all programming languages to this day 44 years later from creation. It’s useful and simple to use. Below is an example of using grep to make selecting multiple columns in R simple and easy to read.

The dataset below has the following column names.

names(data) # Column Names
 [1] "fips"                 "state"                "county"               "metro_area"          
 [5] "population"           "med_hh_income"        "poverty_rate"         "population_lowaccess"
 [9] "lowincome_lowaccess"  "no_vehicle_lowaccess" "s_grocery"            "s_supermarket"       
[13] "s_convenience"        "s_specialty"          "s_farmers_market"     "r_fastfood"          
[17] "r_full_service"      

How can we select only the columns we need to work with?

  • metro_area
  • med_hh_income
  • poverty_rate
  • population_lowaccess
  • lowincome_lowaccess
  • no_vehicle_lowaccess
  • s_grocery
  • s_supermarket
  • s_convenience
  • s_specialty
  • s_farmers_market
  • r_fastfood
  • r_full_service

We can tell R exactly by listing each column as below

data[c("metro_area","med_hh_income", "poverty_rate", "population_lowaccess", "lowincome_lowaccess", "no_vehicle_lowaccess","s_grocery","s_supermarket","s_convenience","s_specialty","s_farmers_market", "r_fastfood", "r_full_service")]

OR

We can tell R where each column we want is.

data[c(4,6,7:17)]

First, writing out each individual column is time-consuming and chances are you’re going to make a typo (I did when writing it). The second option we have to first figure out where the columns are located to then tell R. Well looking at the columns we are trying to access vs the others theirs a specific difference. All these columns have a “_” located in their name, and we can use regular expressions (grep) to select these.

data[grep("_", names(data))])

FYI… to get the column locations you can actually use…

grep("_", names(data))
[1]  4  6  7  8  9 10 11 12 13 14 15 16 17

You will rarely have a regular expression as easy as “_” to select multiple columns, a very useful resource to learn and practice is https://regexr.com

Data was obtained from https://www.ers.usda.gov/data-products/food-access-research-atlas/download-the-data/

2 thoughts on “How To Select Multiple Columns Using Grep & R

  1. Using Base R to subset by index using grep to create a vector may be a good idea if your data set has millions of features (columns).

    For smaller datasets you can subset much easier the tidyverse way with {tidyselect} “helpers” (starts_with(), ends_with(), contains(), last_col(), etc.).

    For example,

    data %>% select(starts_with(“s_”))

    would return those 5 columns starting with “s_”, while

    data %>% select(contains(“lowaccess”))

    would grab those 3 columns containing “lowaccess” in the string. You get the point – very simple and concise code:

    data %>% select(metro_area, med_hh_income, poverty_rate, contains(“lowaccess”), starts_with(“s_”), starts_with(“r_”))

Leave a Reply

Your email address will not be published.