2016-03-29 2 views
-3

У меня есть данные, как показано ниже, и необходимо извлечь текст перед любым номером. или если мы можем выделить текст и номер, то это было бы здоровоизвлечение текста из буквенно-цифрового вектора в R

df<-c("axz123","bww2","c334") 

выход

"axz", "bww", "c" 

или

"axz","bww","c" 
"123","2","334" 
+0

См 'помощи ("regmatches")'. – Roland

ответ

2

Мы можем сделать:

df <- c("axz123","bww2","c334") 
gsub("\\d+", "", df) 
#[1] "axz" "bww" "c" 
gsub("(\\D+)", "", df) 
#[1] "123" "2" "334" 

Для вашего другого примера:

df <- "BAILEYS IRISH CREAM 1.75 LITERS REGULAR_NOT FLAVORED" 
gsub("\\d.*", "", df) 
#[1] "BAILEYS IRISH CREAM " 
gsub("[A-Z_ ]*", "", df) 
#[1] "1.75" 
+0

Спасибо Ало .. это сработало. Могу ли я спросить вас о лихорадке? где я могу узнать этот трюк на gsub(). например, когда использовать «D +» или «d» и т. д., потому что часто сталкиваются с подобными проблемами. Спасибо :) – Nts

+0

Прочтите справочную страницу о 'regex' и выполните множество упражнений. – jogo

2

Мы можем использовать [:alpha:], чтобы соответствовать буквенные символы и сочетать это с gsub() и отрицанием для удаления всех символов, которые не являются алфавитами:

gsub("[^[:alpha:]]", "", df) 
#[1] "axz" "bww" "c" 

Чтобы получить только неалфавитные символы мы можем отбросить отрицание ^:

gsub("[[:alpha:]]", "", df) 
#[1] "123" "2" "334" 
+0

Спасибо за ваш ввод его быстро, но проблема немного сложная, у меня есть данные, такие как «BAILEYS IRISH CREAM 1.75 LITERS REGULAR_NOT FLAVORED», а выход нужен «BAILEYS IRISH CREAM» и «1.75». извините за путаницу. – Nts

+3

@NitinPatil Это должен быть другой вопрос. Пожалуйста, не публикуйте простой пример и ожидайте, что другие ответят на ваши сложные данные. Даже в новой строке есть пробелы. Итак, совершенно другой вопрос. – akrun

+1

@akrun: я извиняюсь за путаницу, я просто пытался упростить вещи – Nts

1

Использование str_extract и регулярных выражений. Мы сопоставляем один или несколько символов перед любым номером ((?=\\d)) и извлекаем его.

library(stringr) 
str_extract(df, "[[:alpha:]]+(?=\\d)") 
#[1] "axz" "bww" "c" 

Если нужно отделить числовой и нечисловой, strsplit можно использовать

lst <- strsplit(df, "(?<=[^0-9])(?=[0-9])", perl=TRUE) 
Смежные вопросы