Извлечение букв из строки в R

у меня есть вектор, содержащий символьные имена переменных, такие как x <- c("AB.38.2", "GF.40.4", "ABC.34.2"). Я хочу извлечь буквы, чтобы у меня был вектор символов, содержащий только буквы, например c("AB", "GF", "ABC").

поскольку количество букв варьируется, я не могу использовать substring для указания первого и последнего символов.

как я могу это сделать?

5 ответов


вы можете попробовать

sub("^([[:alpha:]]*).*", "\1", x)
[1] "AB"  "GF"  "ABC"

ни один из ответов не работает, если у вас смешанная буква с пробелами. Вот что я делаю для этих случаев:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd")
unique(na.omit(unlist(strsplit(unlist(x), "[^a-zA-Z]+"))))

[1]" AB "" GF "" ABC "" A "" B "" C ""Fd"


вот как мне удалось решить эту проблему. Я использую это, потому что он возвращает 5 элементов чисто, и я могу контролировать, хочу ли я пробел между словами:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd", "  a")

extract.alpha <- function(x, space = ""){      
  require(stringr)
  require(purrr)
  require(magrittr)
  
  y <- strsplit(unlist(x), "[^a-zA-Z]+") 
  z <- y %>% map(~paste(., collapse = space)) %>% simplify()
  return(z)}

extract.alpha(x, space = " ")

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

самое простое и быстрое решение, которое я нашел:

x <- c("AB.38.2", "GF.40.4", "ABC.34.2")
only_letters <- function(x) { gsub("^([[:alpha:]]*).*$","\1",x) }
only_letters(x)

и выход:

[1] "AB"  "GF"  "ABC"

надеюсь, это поможет кому-то!


предыдущие ответы кажутся более сложными, чем это необходимо. этот вопрос в отношении цифр также работает с буквами:

> x <- c("AB.38.2", "GF.40.4", "ABC.34.2", "A B ..C 312, Fd", "  a")
> gsub("[^a-zA-Z]", "", x)
[1] "AB"    "GF"    "ABC"   "ABCFd" "a"