У меня есть данные из открытого опроса. У меня есть таблица комментариев и таблица кодов. Таблица кодов - это набор тем или строк.
Что я пытаюсь сделать: Проверьте, существует ли слово / строка из соответствующего столбца в таблице кодов в открытом конце комментария. Добавьте новый столбец в таблице комментариев для указанной темы c и двоичный 1 или 0, чтобы указать, какие записи были помечены.
В таблице кодов имеется довольно много столбцов, они являются действующими и постоянно меняющимися, порядок столбцов и количество столбцов могут изменяться.
В настоящее время я делаю это довольно запутанно, я проверяю каждый столбец по отдельности с помощью нескольких строк кода и считаю, что, вероятно, есть гораздо лучший способ сделать это.
Я не могу понять, как заставить работать с функцией stringi.
Помощь очень ценится.
Вот пример набора кода, чтобы вы могли увидеть, что я пытаюсь сделать:
#Two tables codes and comments
#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"),
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 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)
)
#check if any words from the columns in codes table match comments
#here I am looking for a match column by column but looking for a better way - lappy?
support = paste(codes$Support, collapse = "|")
supp_stringi = stri_detect_regex(comments$Open_comments, support)
supp_grepl = grepl(pattern = support, x = comments$Open_comments)
identical(supp_stringi, supp_grepl)
comments$Support = ifelse(supp_grepl == TRUE, 1, 0)
# What I would like to do is loop through all columns in codes rather than outlining the above code for each column in codes