endswith python r string startswith ends-with

python - if endswith



¿R tiene una función que comienza o termina como python? (6)

Como se agregó a la base en 3.3.0 , startsWith (y endsWith ) son exactamente esto.

> startsWith("what", "wha") [1] TRUE > startsWith("what", "ha") [1] FALSE

https://stat.ethz.ch/R-manual/R-devel/library/base/html/startsWith.html

La pregunta es muy clara en el título.


Esto es relativamente simple usando la función de subcadena:

> strings = c("abc", "bcd", "def", "ghi", "xyzzd", "a") > str_to_find = "de" > substring(strings, 1, nchar(str_to_find)) == str_to_find [1] FALSE FALSE TRUE FALSE FALSE FALSE

Cortas cada cuerda a la longitud deseada con subcadena. La longitud es el número de caracteres que está buscando al comienzo de cada cadena.


La forma más simple que se me ocurre es usar el operador %like% :

library(data.table) "foo" %like% "^f"

evalúa como TRUE - Comenzando con f

"foo" %like% "o$"

se evalúa como TRUE - Terminando con o

"bar" %like% "a"

se evalúa como TRUE : contiene un


La instrucción de select del paquete dplyr admite starts_with y ends_with . Por ejemplo, esto selecciona las columnas del marco de datos del iris que comienzan con Petal

library(dplyr) select(iris, starts_with("Petal"))

select admite otros subcomandos. Intenta ?select .


No incorporado así.

Las opciones incluyen grepl y substr .

x <- ''ABCDE'' grepl(''^AB'', x) # starts with AB? grepl(''DE$'', x) # ends with DE? substr(x, 1, 2) == ''AB'' substr(''ABCDE'', nchar(x)-1, nchar(x)) == ''DE''


Tomando prestado algún código del paquete dplyr [vea esto] podría hacer algo como esto:

starts_with <- function(vars, match, ignore.case = TRUE) { if (ignore.case) match <- tolower(match) n <- nchar(match) if (ignore.case) vars <- tolower(vars) substr(vars, 1, n) == match } ends_with <- function(vars, match, ignore.case = TRUE) { if (ignore.case) match <- tolower(match) n <- nchar(match) if (ignore.case) vars <- tolower(vars) length <- nchar(vars) substr(vars, pmax(1, length - n + 1), length) == match }