Получить символы после определенного шаблона в R - регулярное выражение - PullRequest
0 голосов
/ 13 ноября 2018

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

df <- data.frame(cat = c("c(\\\"BPT\\\", \"BP\")", "c(\"BP2\", \"BP\")", "c(\"BPT\", \"BP\")", "c(\"CN\", \"NC\")"))
df$cat <- as.character(df$cat)
df$cat

Как извлечь символы, которые появляются после c (\ ", иногда есть только одна обратная косая черта, а иногда 2. Аналогично с символамииногда символы равны 2, а иногда - 3. например, BP2, BP и т. д.

Пока я пробовал:

substr(x = df$cat, start = 4, stop = 6)

Но это приводит к:

 "\"BP" "BP2"  "BPT"  "CN\""

И я хочу, чтобы вывод отображался только

"BPT" "BP2"  "BPT"  "CN"

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать

df <- data.frame(cat = c("c(\\\"BPT\\\", \"BP\")", "c(\"BP2\", \"BP\")", "c(\"BPT\", \"BP\")", "c(\"CN\", \"NC\")"))
df$cat <- as.character(df$cat)
unlist(lapply(gsub('\\', '', df$cat, fixed=TRUE), function(x) eval(parse(text=x))[[1]]))
## => [1] "BPT" "BP2" "BPT" "CN" 

См. R демо онлайн .

Примечания

  • gsub('\\', '', df$cat, fixed=TRUE) удаляет все обратные слеши.Вы можете использовать gsub('\\\"', '"', df$cat, fixed=TRUE), если планируете удалить обратную косую черту только до того, как ".
  • eval(parse(text=x))[[1]] проанализирует вектор и вернет первый элемент
  • lapply, помогающий проследить все данные, которые выиметь.См. Использование sapply и lapply .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...