#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. Вы можете сделать это с помощью этой строки