¿Tiene R la función comienza con o termina como Python?

Estaba buscando predictores cuyo nombre comience con alguna subcadena, no pudo encontrar ninguna función similar.

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

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' 

La statement de select del paquete dplyr es compatible con starts_with y ends_with . Por ejemplo, esto selecciona las columnas del dataframe del iris que comienzan con Petal

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

select soporta otros subcomandos también. Prueba ?select

La forma más sencilla en que puedo pensar es usar el operador %like% :

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

evalúa como TRUE – Comenzando con f

 "foo" %like% "o$" 

evalúa como TRUE – Terminando con o

 "bar" %like% "a" 

evalúa como TRUE – que contiene un

Al pedir prestado algo de código del paquete dplyr [ver 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 } 

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 

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