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

Extract letters from a string in R

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

因为字母的数量不同,我不能用substring来指定第一个和最后一个字符。

我该怎么做?

你可以试试

sub("^([[:alpha:]]*).*", "\1", x)
[1] "AB"  "GF"  "ABC"
如果您将字母与空格混在一起,

None 的答案有效。以下是我为这些案例所做的工作:

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"

这就是我设法解决这个问题的方法。我使用它是因为它 returns 5 个项目很干净,我可以控制是否要在单词之间添加 space:

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"

希望这对某人有所帮助!

前面的答案似乎比必要的更复杂。 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"