соответствие строки для точного значения в столбце, когда строка в виде запятой в R - PullRequest
0 голосов
/ 29 ноября 2018

Я хотел бы найти точные совпадения для данного запроса (в приведенном ниже примере запрашивается «ABC». Однако я хочу, чтобы все строки были точно обозначены ABC или если они разделены запятой. Что означает, что я хотел бы получить желаемоевывод ниже.

Пример данных:

query = c('ABC')

col1 = c("ABC", "DEF", "ABCDE", "DAC", "CBA,ABC,LMN1")
col2 = c("DEF", "EQ", "AC", "DE,ABC", "QSX")
col3 = c(12, 30, NA, 0, 54)
df = data.frame(col1, col2, col3)

Требуемый вывод:

            col1      col2     col3
1            ABC       DEF       12
4            DAC    DE,ABC        0
5   CBA,ABC,LMN1       QSX       54

Я пыталсяиспользуйте grepl, но я получаю следующее (см. строку с меткой 3).

df[with(df, grepl(query, col1)|grepl(query, col2)),]

Мой вывод (не требуется):

            col1      col2     col3
1            ABC       DEF       12
3          ABCDE        AC       NA
4            DAC    DE,ABC        0
5   CBA,ABC,LMN1       QSX       54

Чтолучший способ обеспечить мне строки, которые я ищу?

1 Ответ

0 голосов
/ 29 ноября 2018

Нам нужна граница слова в «запросе».Прокрутите столбцы, примените grepl, Reduce к одному логическому vector с |, используйте его для подстановки строк

queryN <- paste0("\\b", query, "\\b")
df[Reduce(`|`, lapply(df[1:2], grepl, pattern = queryN)),]
#           col1   col2 col3
#1          ABC    DEF   12
#4          DAC DE,ABC    0
#5 CBA,ABC,LMN1    QSX   54

Или используя метод OP

df[with(df, grepl(queryN, col1)|grepl(queryN, col2)),]
...