Следуя решенной теме здесь: соответствие строк регулярному выражению точное совпадение (с небольшой благодарностью @Onyambu за обновленный код).
Мне нужно точно сопоставить строки - даже если есть специальные символы.
Примечание - извиняюсь, это третий вопрос по этому поводу. Я почти у цели, но теперь я не знаю, как обрабатывать специальные символы, и я все еще повышаю квалификацию по управлению строками в r.
ОБНОВЛЕНО ДЛЯ ЯСНОСТИ:
У меня есть таблица соответствий слов / строк вроде этой:
codes <- structure(
list(
column1 = structure(
c(2L, 3L, NA),
.Label = c("",
"4+", "4 +"),
class = "factor"
),
column2 = structure(
c(1L,
3L, 2L),
.Label = c("old", "the money", "work"),
class = "factor"
),
column3 = structure(
c(3L, 2L, NA),
.Label = c("", "wonderyears",
"woke"),
class = "factor"
)
),
row.names = c(NA,-3L),
class = "data.frame"
)
И набор данных, в котором есть столбец строк. Я хочу увидеть, включен ли какой-либо из кодов в каждую из записей в строках:
strings<- structure(
list(
SurveyID = structure(
1:4,
.Label = c("ID_1", "ID_2",
"ID_3", "ID_4"),
class = "factor"
),
Open_comments = structure(
c(2L,
4L, 3L, 1L),
.Label = c(
"I need to pick up some apples",
"The system works",
"Flag only if there is a 4 with a plus",
"Show me the money"
),
class = "factor"
)
),
class = "data.frame",
row.names = c(NA,-4L)
)
В настоящее время я сопоставляю коды строкам, используя следующий код:
strings[names(codes)] <- lapply(codes, function(x)
+(grepl(paste0("\\b", na.omit(x), "\\b", collapse = "|"), strings$Open_comments)))
Выход:
SurveyID Open_comments column1 column2 column3
1 ID_1 The system works 0 0 0
2 ID_2 Show me the money 0 1 0
3 ID_3 Flag only if there is a 4 with a plus 1 0 0
4 ID_4 I need to pick up some apples 0 0 0
Проблема - строка 3 ID_3 Я хочу отметить это только в том случае, если строка включает 4+ или 4+, но она все равно помечается. Есть ли способ точно его запечатлеть?
4 +
и4+
находятся в столбце 1. это опечатка - person akrun   schedule 10.09.2020I need to pick up 4 apples is being highlighted in column 1 even though it doesn't have a +.
. В столбце 1 вывода отображается 1 для этого. - person akrun   schedule 10.09.20201 0 0 0
правильно? - person akrun   schedule 10.09.20204+ stars
- person akrun   schedule 10.09.2020apples
- person akrun   schedule 10.09.2020+
- person akrun   schedule 10.09.2020