Ich möchte die Position eines Zeichens in einer Zeichenfolge finden.
Sagen: string = "the2quickbrownfoxeswere2tired"
Ich möchte, dass die Funktion zurückkehrt 4und 24- die Zeichenposition des 2s in string.
Ich möchte die Position eines Zeichens in einer Zeichenfolge finden.
Sagen: string = "the2quickbrownfoxeswere2tired"
Ich möchte, dass die Funktion zurückkehrt 4und 24- die Zeichenposition des 2s in string.
Antworten:
Sie können verwenden gregexpr
gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired")
[[1]]
[1] 4 24
attr(,"match.length")
[1] 1 1
attr(,"useBytes")
[1] TRUE
oder vielleicht str_locate_allaus einem Paket, für stringrdas ein Wrapper ist (ab Version 1.0)gregexprstringi::stri_locate_allstringr
library(stringr)
str_locate_all(pattern ='2', "the2quickbrownfoxeswere2tired")
[[1]]
start end
[1,] 4 4
[2,] 24 24
Beachten Sie, dass Sie einfach verwenden können stringi
library(stringi)
stri_locate_all(pattern = '2', "the2quickbrownfoxeswere2tired", fixed = TRUE)
Eine andere Option in der Basis Rwäre so etwas wie
lapply(strsplit(x, ''), function(x) which(x == '2'))
sollte funktionieren (mit einem Zeichenvektor x)
regexprstatt gregexpr, um die ganzen Zahlen leicht zu erhalten. Oder verwenden Sie unlistdie Ausgabe wie in einer anderen Antwort unten angegeben.
Hier ist eine weitere einfache Alternative.
> which(strsplit(string, "")[[1]]=="2")
[1] 4 24
[[1]]macht?
Sie können die Ausgabe nur 4 und 24 mit unlist machen:
unlist(gregexpr(pattern ='2',"the2quickbrownfoxeswere2tired"))
[1] 4 24
Suchen Sie die Position des n-ten Vorkommens von str2 in str1 (gleiche Reihenfolge der Parameter wie Oracle SQL INSTR). Gibt 0 zurück, wenn es nicht gefunden wird
instr <- function(str1,str2,startpos=1,n=1){
aa=unlist(strsplit(substring(str1,startpos),str2))
if(length(aa) < n+1 ) return(0);
return(sum(nchar(aa[1:n])) + startpos+(n-1)*nchar(str2) )
}
instr('xxabcdefabdddfabx','ab')
[1] 3
instr('xxabcdefabdddfabx','ab',1,3)
[1] 15
instr('xxabcdefabdddfabx','xx',2,1)
[1] 0
Verwenden Sie Folgendes, um nur die ersten Standorte lapply()zu finden min():
my_string <- c("test1", "test1test1", "test1test1test1")
unlist(lapply(gregexpr(pattern = '1', my_string), min))
#> [1] 5 5 5
# or the readable tidyverse form
my_string %>%
gregexpr(pattern = '1') %>%
lapply(min) %>%
unlist()
#> [1] 5 5 5
Um nur die zu finden Verwenden Sie Folgendes, um letzten Standorte lapply()zu finden max():
unlist(lapply(gregexpr(pattern = '1', my_string), max))
#> [1] 5 10 15
# or the readable tidyverse form
my_string %>%
gregexpr(pattern = '1') %>%
lapply(max) %>%
unlist()
#> [1] 5 10 15
.indexOf()oder so?