La question est très claire dans le titre.
Comme ajouté à base
dans 3.3. , startsWith
(et endsWith
) sont exactement ceci.
> startsWith("what", "wha")
[1] TRUE
> startsWith("what", "ha")
[1] FALSE
https://stat.ethz.ch/R-manual/R-devel/library/base/html/startsWith.html
Pas intégré comme ça.
Les options incluent grepl
et 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'
L'instruction select
du paquet dplyr prend en charge starts_with
et ends_with
. Par exemple, cela sélectionne les colonnes du cadre de données de l’iris commençant par Petal
library(dplyr)
select(iris, starts_with("Petal"))
select
prend également en charge d'autres sous-commandes. Essayez ?select
.
Le moyen le plus simple auquel je puisse penser est d'utiliser le %like%
opérateur:
library(data.table)
"foo" %like% "^f"
évalue comme TRUE
- à partir de f
"foo" %like% "o$"
évalue comme TRUE
- Se terminant par o
"bar" %like% "a"
évalue comme TRUE
- contenant a
Ceci est relativement simple en utilisant la fonction substring:
> 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
Vous coupez chaque chaîne à la longueur souhaitée avec une sous-chaîne. La longueur étant le nombre de caractères que vous recherchez au début de chaque chaîne.
En empruntant du code du paquetage dplyr
[voir ceci] , vous pourriez faire quelque chose comme ceci:
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
}