Данные:
df <- data.frame(
Student = c("canada.student12", "canada.student2", "canada.student23","US.student2", "US.student32", "Aus.student87", "Turkey.student25"),
Value = c(2,3,5,6,2,654,5)
)
Решение: (в базе R)
Идея состоит в том, чтобы использовать grepl
для сопоставления тех значений, где число 2
встречается на границе слова , то есть в регулярном выражении по адресу \\b
, и для исключения этих строк с помощью отрицателя !
:
df[!grepl("student2\\b", df$Student),]
Student Value
1 canada.student12 2
3 canada.student23 5
5 US.student32 2
6 Aus.student87 654
7 Turkey.student25 5
В качестве альтернативы вы также можете go наоборот и сопоставить те шаблоны, которые вы хотите сохранить:
df[grepl("student(?=\\d{2,})", df$Student, perl = T),]
Здесь идея состоит в том, чтобы использовать положительный просмотр вперед для сопоставления значений с student
iff , за ними сразу следует как минимум два цифры (\\d{2,}
). (Обратите внимание, что при использовании просмотра вперед или назад необходимо включить perl = T
.)