совпадение строк регулярное выражение точное совпадение - PullRequest
0 голосов
/ 21 июня 2020

Этот поток следует из этого ответа на вопрос: Соответствующие строки l oop по нескольким столбцам

Я открыл новый поток, так как я хотел бы обновить флаг для точного только соответствует ..

У меня есть таблица ключевых слов в отдельных столбцах следующим образом:

#codes table
codes <- structure(
  list(
    Support = structure(
      c(2L, 3L, NA),
      .Label = c("",
                 "help", "questions"),
      class = "factor"
    ),
    Online = structure(
      c(1L,
        3L, 2L),
      .Label = c("activities", "discussion board", "quiz", "sy"),
      class = "factor"
    ),
    Resources = structure(
      c(3L, 2L, NA),
      .Label = c("", "pdf",
                 "textbook"),
      class = "factor"
    )
  ),
  row.names = c(NA,-3L),
  class = "data.frame"
)

У меня также есть таблица комментариев со следующей структурой:

#comments table
comments <- structure(
  list(
    SurveyID = structure(
      1:5,
      .Label = c("ID_1", "ID_2",
                 "ID_3", "ID_4", "ID_5"),
      class = "factor"
    ),
    Open_comments = structure(
      c(2L,
        4L, 3L, 5L, 1L),
      .Label = c(
        "I could never get the pdf to download",
        "I could never get the system to work",
        "I didn’t get the help I needed on time",
        "my questions went unanswered",
        "staying motivated to get through the textbook",
        "there wasn’t enough engagement in the discussion board"
      ),
      class = "factor"
    )
  ),
  class = "data.frame",
  row.names = c(NA,-5L)
)

Что я пытаюсь сделать:

Поиск по ключевому слову с точным соответствием. Следующий рабочий код был предоставлен @Len Greski и @Ronak Shah из предыдущего потока (огромное спасибо обоим):

resultsList <- lapply(1:ncol(codes),function(x){
     y <- stri_detect_regex(comments$Open_comments,paste(codes[[x]],collapse = "|"))
     ifelse(y == TRUE,1,0)   
     })

results <- as.data.frame(do.call(cbind,resultsList))
colnames(results) <- colnames(codes)
mergedData <- cbind(comments,results)
mergedData

и

comments[names(codes)] <- lapply(codes, function(x) 
            +(grepl(paste0(na.omit(x), collapse = "|"), comments$Open_comments)))

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

Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...