Есть ли способ в R, чтобы вернуть значения с подстановочными знаками для определенных символов? - PullRequest
0 голосов
/ 10 марта 2020

говорят, что у меня есть что-то вроде:

df<-data.frame(ID=c(1, 1, 1,2,2,2,2),
               value=c('ABC000', 'ABC002', 'ABC003', 'ACC000', 'ABC005', 'ABC006', 'ABC007'),
               keep=c(1, 0, 1,0,0,1,0))

  ID  value keep
1  1 ABC000    1
2  1 ABC002    0
3  1 ABC003    1
4  2 ACC000    0
5  2 ABC005    0
6  2 ABC006    1
7  2 ABC007    0

и говорят, что я хочу сохранить значения с префиксом 'AB C', мне все равно, какие значения в четвертом и пятом символ, а затем последнее место должно быть 0, 3 или 6. Есть ли способ в R сделать это?

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Попробуйте

value[startsWith(value, "ABC") & grepl("[036]$", value)]
# [1] "ABC000" "ABC003" "ABC006"

Чтобы создать новый столбец с 1 и 0 для условия, равного TRUE или нет, вы можете сделать

+(startsWith(value, "ABC") & grepl("[036]$", value))
# [1] 1 0 1 0 0 1 0

data

value=c('ABC000', 'ABC002', 'ABC003', 'ACC000', 'ABC005', 'ABC006', 'ABC007')
1 голос
/ 10 марта 2020

Вы можете использовать stringr функции и выполнять регулярные выражения следующим образом:

library(dplyr)
library(stringr)

df %>% 
  filter(str_detect(value, pattern = "^ABC.{2}(0|3|6)$"))

#   ID  value keep
# 1  1 ABC000    1
# 2  1 ABC003    1
# 3  2 ABC006    1

Деконструкция шаблона обнаружения следующим образом:

  • Строка должна начинаться с ^ABC, где ^ привязывает начало строки,
  • .{2}, где . - это ваш символ подстановки, и я указываю, что есть два ({2}),
  • и (0|3|6)$ наконец, я говорю, что строка заканчивается 0, 3 или 6 (где $ привязывает конец строки)

Edit

Пользователь упоминается в комментариях заинтересованность в создании нового поля, которое отмечает, соответствует ли value поле указанному условию.

Вы можете добавить новое поле, используя mutate и if_else следующим образом:

df %>% 
  mutate(flag = if_else(str_detect(value, pattern = "^ABC.{2}[036]$"), 1, 0))

#   ID  value keep flag
# 1  1 ABC000    1    1
# 2  1 ABC002    0    0
# 3  1 ABC003    1    1
# 4  2 ACC000    0    0
# 5  2 ABC005    0    0
# 6  2 ABC006    1    1
# 7  2 ABC007    0    0

Оператор if_else назначает значение 1 для сопоставления с шаблоном и 0, когда оно не «т.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...