在字符串中查找字符的位置

3
我正在尝试在R中寻找与ANYALPHA SAS函数相当的函数。该函数搜索字符字符串以查找字母字符,并返回找到该字符的第一个位置。
例如:对于以下字符串“123456789A”,ANYALPHA函数将返回10,因为第一个字母字符位于字符串的第10个位置。我想在R中复制此功能,但一直未能解决。我需要搜索任何大小写字母字符(即[:alpha:])。
感谢您提供的任何帮助!

4
regexpr("A", "123456789A")[1] 这段代码返回值为 10 - pcantalupo
1
这里有一个函数给你 anyalpha <- function(txt) regexpr("[[:alpha:]]", txt)[1] - Pierre L
完美,它们都运行得很好(我在第一个示例中将“A”更改为“[[alpha]]”,它工作得很好。我想我最终会使用这个函数。谢谢你们两个! - J. Hermanson
c(regexpr("[[:alpha:]]", txt)) 也可以实现,因为 c() 可以去除属性。 - Rich Scriven
谢谢您关于使用c()函数去除属性的评论。我是R语言的新手,还有很多需要学习的地方。 - J. Hermanson
1个回答

2

这里有一个anyalpha函数,我添加了一些额外的功能。你可以在n参数中指定要匹配的最大次数,默认为1。你还可以指定是否希望返回位置或值本身,使用value=TRUE

anyalpha <- function(txt, n=1, value=FALSE) {
  txt <- as.character(txt)
  indx <- gregexpr("[[:alpha:]]", txt)[[1]]
  ret <- indx[1:(min(n, length(indx)))]

  if(value) {
    mapply(function(x,y) substr(txt, x, y), ret, ret)
    } else {ret}
}

#test
x <-  '123A56789BC'
anyalpha(x)
#[1] 4
anyalpha(x, 2)
#[1]  4 10
anyalpha(x, 2, value=TRUE)
#[1] "C" "A"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接