Выберите строки, содержащие только определенную букву

#r #regex #dataframe

Вопрос:

У меня есть фрейм данных следующим образом:

 df <- data.frame(v1 = 1:5, v2 = c('A, A, A', 'A', 'S', 'A, S', 'P, P, A'))  

в столбце v2 есть три буквы (A, P, S), где они могут отображаться в любой комбинации, например "A, A", "A, P", "P, P, S", "A", "A, A, S, A" , и т. Д.

Что я хочу сделать, так это обнаружить строки, которые содержат только букву «А», независимо от того, сколько раз она повторяется. В моем примере df желаемый видящий : TRUE, TRUE, FALSE, FALSE, FALSE .

заранее спасибо.

Комментарии:

1. еще один: grepl('([A-Z])([, ] \1)', df$v2) это не соответствует букве, поэтому последнее также совпадает, но вы можете изменить [A-Z] на [A] , чтобы получить желаемый результат

Ответ №1:

Я бы использовал шаблон регулярного выражения ^A(?:,s*A)*$ :

 df[grepl('^A(?:,\s*A)*

Данные:

 df <- data.frame(v1 = 1:5, v2 = c('A, A, A', 'A', 'S', 'A, S', 'P, P, A'))  

Ответ №2:

Используя регулярное выражение, вы можете сделать -

 grepl('^(A,?\s?) 


Ответ №3:

Вы можете разделить значения на векторы в списке, а затем проверить, что все значения в этом векторе равны A. Вы можете сделать это с помощью этой строки

 sapply(strsplit(df$v2, ", "), function(x) all(x=="A")) # [1] TRUE TRUE FALSE FALSE FALSE  

, df$v2), ] v1 v2 1 1 A, A, A 2 2 A Данные:


Ответ №2:

Используя регулярное выражение, вы можете сделать -


Ответ №3:

Вы можете разделить значения на векторы в списке, а затем проверить, что все значения в этом векторе равны A. Вы можете сделать это с помощью этой строки


, df$v2) [1] TRUE TRUE FALSE FALSE FALSE

Ответ №3:

Вы можете разделить значения на векторы в списке, а затем проверить, что все значения в этом векторе равны A. Вы можете сделать это с помощью этой строки


, df$v2), ] v1 v2 1 1 A, A, A 2 2 AДанные:


Ответ №2:

Используя регулярное выражение, вы можете сделать —


Ответ №3:

Вы можете разделить значения на векторы в списке, а затем проверить, что все значения в этом векторе равны A. Вы можете сделать это с помощью этой строки