Этот поток следует из этого ответа на вопрос: Соответствующие строки 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».
Большое спасибо