Разница в том, что matches
может принимать регулярное выражение в качестве шаблона для сопоставления имен столбцов, а select
, в то время как contains
выполняет буквальное совпадение подстроки или полного имени.Он описывается в ?select_helpers
как
contains (): содержит буквенную строку.
match (): соответствует регулярному выражению.
Рассмотрим простой пример, в котором мы хотим выбрать столбцы с подстрокой '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
Здесь он совпадает с 'col' буквально в именах столбцов и выбирает их.Если мы изменим критерии сопоставления, чтобы они соответствовали 'col', за которым следуют одна или несколько цифр (\\d+
) с регулярным выражением
df1 %>%
select(contains("col\\d+"))
#data frame with 0 columns and 5 rows
, если происходит сбой, поскольку он ищет подстроку имени столбца "col\\d+"
df1 %>%
select(matches("col\\d+"))
# col1 col2
#1 24 46
#2 24 46
#3 24 46
#4 24 46
#5 24 46
, тогда как matches
берут regex
и соответствуют этим шаблонам