I have decided to spend some time to learn dplyr thoroughly. I have just come across the select()
function and some of the helper functions that come with it. <
The difference is that matches
can take regex as pattern to match column names and select
while contains
does the literal match of substring or full name match. It is described in the ?select_helpers
as
contains(): Contains a literal string.
matches(): Matches a regular expression.
Consider a simple example where we want to select columns that have substring 'col'
df1 <- data.frame(colnm = 1:5, col1 = 24, col2 = 46)
df1 %>%
select(contains("col"))
# colnm col1 col2
#1 1 24 46
#2 2 24 46
#3 3 24 46
#4 4 24 46
#5 5 24 46
Here, it matches the 'col' literally in the column names and select those. If we change the matching criteria to match 'col' followed by one or more digits (\\d+
) with a regex
df1 %>%
select(contains("col\\d+"))
#data frame with 0 columns and 5 rows
if fails, because it is looking for column name substring "col\\d+"
df1 %>%
select(matches("col\\d+"))
# col1 col2
#1 24 46
#2 24 46
#3 24 46
#4 24 46
#5 24 46
whereas matches
take regex
and match those patterns