Как убрать круглые скобки и текст внутри r? - PullRequest
1 голос
/ 26 июня 2019

У меня есть фрейм данных с некоторыми названиями видов + круглые скобки и число внутри + некоторый текст, например: "имя вида (2) V1", которые присутствуют в фрейме данных $ видов_имя. Мне нужно удалить его с помощью gsub, чтобы он возвращал только «видовое имя», а другой - «видовое имя V1». Заранее спасибо!

Я искал вокруг, и ничто не могло найти шаблон регулярного выражения для этого, по крайней мере в R. Я мог только найти код для удаления скобок. Я слишком нуб, чтобы знать, как удалить все остальное.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Поскольку вы упомянули gsub(), я предположил, что вы хотите придерживаться базы R.

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

"(" является специальным символом и поэтому должен экранироваться с помощью "\", но поскольку "\" сам по себе является специальным символом, вы должны экранировать его другим "\", в результате чего получаются символы "\\".

"" соответствует любому одному символу, а "*" - это квантификатор, который говорит, что соответствует 0 или более.

«$» обозначает конец строки.

[0-9] соответствует одному целому числу.

"+" - это другой квантификатор, который говорит, что он соответствует одному или нескольким.

Таким образом, имеем:

set.seed(42)

df <- data.frame(species_name = paste0("species ", 
                                       sample(LETTERS, 10), 
                                       " name(", 
                                       sample(1:10), 
                                       ") V", 
                                       sample(1:10)))

df$species_name1 <- gsub("\\(.*$", "", df$species_name)

df$species_name2 <- gsub("\\([0-9]*\\)", "", df$species_name)

df

Который производит:

            species_name  species_name1      species_name2
1   species Q name(9) V4 species Q name  species Q name V4
2   species E name(5) V5 species E name  species E name V5
3   species A name(6) V7 species A name  species A name V7
4   species J name(4) V9 species J name  species J name V9
5   species D name(2) V8 species D name  species D name V8
6  species R name(8) V10 species R name species R name V10
7   species Z name(3) V2 species Z name  species Z name V2
8   species O name(7) V3 species O name  species O name V3
9   species G name(1) V6 species G name  species G name V6
10 species V name(10) V1 species V name  species V name V1
1 голос
/ 26 июня 2019

Следующие два регулярных выражения решают две проблемы в вопросе.

s <- "species name(2) V1"

sub("(^[^(]*)\\(.*$", "\\1", s)
#[1] "species name"

sub("\\([^)]*\\)", "", s)
#[1] "species name V1"

Теперь примените их к интересующему столбцу.

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