从R中的字符串中提取字母

时间:2015-06-18 09:57:21

标签: r string data-manipulation

我有一个包含变量名称的字符向量,例如x <- c("AB.38.2", "GF.40.4", "ABC.34.2")。我想提取字母,以便我有一个字符向量,现在只包含字母,例如c("AB", "GF", "ABC")

由于字母数量不同,我无法使用substring指定第一个和最后一个字符。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

你可以尝试

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

答案 1 :(得分:2)

如果你的混合字母带有空格,那么这些答案都不起作用。以下是我为这些案例所做的事情:

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”

答案 2 :(得分:2)

这就是我设法解决这个问题的方法。我使用它是因为它可以干净地返回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 = " ")

答案 3 :(得分:2)

以前的答案似乎比必要的要复杂。 This question关于数字的字母也可以使用:

> 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" 

答案 4 :(得分:0)

我意识到这是一个古老的问题但是因为我现在正在寻找类似的答案而且发现它,我想我会分享。

我发现自己最简单,最快速的解决方案:

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"

希望这有助于某人!